如何估算一臺數據庫服務器能夠承受的併發量?

2 個回答
java架构设计
2019-09-01

這裡分享一下個人的一點認識,不足之處歡迎大家拍磚並補充。

僅僅是根據題主的問題是無法直接給出準確的答案的,我相信誰也不敢直接給你下定義去估算一臺數據庫服務器能夠承受的併發量是多少。即使給出了,也無法確保是否有預料之外的情況發生。

題主應該確切的說出你的目的,比如你是為了預估已有系統的的容量和併發瓶頸,還是做新項目的技術選型。另外還需要一系列的基礎數據支撐,才能更好的做出併發估算。

下面咱們一起討論一下,如何做技術選型:

內在因素

這裡分享一下個人的一點認識,不足之處歡迎大家拍磚並補充。

僅僅是根據題主的問題是無法直接給出準確的答案的,我相信誰也不敢直接給你下定義去估算一臺數據庫服務器能夠承受的併發量是多少。即使給出了,也無法確保是否有預料之外的情況發生。

題主應該確切的說出你的目的,比如你是為了預估已有系統的的容量和併發瓶頸,還是做新項目的技術選型。另外還需要一系列的基礎數據支撐,才能更好的做出併發估算。

下面咱們一起討論一下,如何做技術選型:

內在因素

在估算之前我們必須清楚這臺數據庫服務器的配置是什麼情況,正常情況下我們需要摸清楚以下幾點因素:

  1. 什麼數據庫?是MySQL還是Oracle亦或是DB2、PostgreSQL等;

  2. 幾核CPU?現代數據庫應用都充分的運用了多核CPU的並行處理能力;

  3. 內存多大?數據庫的索引數據、緩存數據都會進入內存中;

  4. 磁盤IO能力:數據庫文件都存儲在磁盤中,所以磁盤的IO能力將是影響數據庫性能的最直接因素;

  5. 網絡帶寬:網絡的上行和下行帶寬,數據庫服務器可支持的最大連接數是多少。

外在因素

天下武功,唯快不破”。

應用程序開發如此,SQL查詢、操作也是如此。更快意味著服務器資源的快速釋放,以便CPU能繼續處理其他的任務請求。

我們在評估數據庫的併發量的時候,即使數據庫服務器性能再好,你做出的評估如果沒有結合使用數據庫的程序的話,那也是屬於紙上談兵。

這裡分享一下個人的一點認識,不足之處歡迎大家拍磚並補充。

僅僅是根據題主的問題是無法直接給出準確的答案的,我相信誰也不敢直接給你下定義去估算一臺數據庫服務器能夠承受的併發量是多少。即使給出了,也無法確保是否有預料之外的情況發生。

題主應該確切的說出你的目的,比如你是為了預估已有系統的的容量和併發瓶頸,還是做新項目的技術選型。另外還需要一系列的基礎數據支撐,才能更好的做出併發估算。

下面咱們一起討論一下,如何做技術選型:

內在因素

在估算之前我們必須清楚這臺數據庫服務器的配置是什麼情況,正常情況下我們需要摸清楚以下幾點因素:

  1. 什麼數據庫?是MySQL還是Oracle亦或是DB2、PostgreSQL等;

  2. 幾核CPU?現代數據庫應用都充分的運用了多核CPU的並行處理能力;

  3. 內存多大?數據庫的索引數據、緩存數據都會進入內存中;

  4. 磁盤IO能力:數據庫文件都存儲在磁盤中,所以磁盤的IO能力將是影響數據庫性能的最直接因素;

  5. 網絡帶寬:網絡的上行和下行帶寬,數據庫服務器可支持的最大連接數是多少。

外在因素

天下武功,唯快不破”。

應用程序開發如此,SQL查詢、操作也是如此。更快意味著服務器資源的快速釋放,以便CPU能繼續處理其他的任務請求。

我們在評估數據庫的併發量的時候,即使數據庫服務器性能再好,你做出的評估如果沒有結合使用數據庫的程序的話,那也是屬於紙上談兵。

結合以下實際情況,可以更準確安全的做數據庫併發量評估或技術選型:

  1. 鏈接數據庫的都有哪些程序?給APP用和給大數據團隊做數據報表分析用完全是兩碼事;

  2. 業務數據量多大?最大的表能達到多少?是否需要分庫?分表?

  3. 平均SQL執行時間多大?

  4. 業務程序總PV能達到多少,每天什麼時間段是高峰期,高峰期持續多久?可以根據高峰期QPS來預估數據庫要承受的併發量,在此基礎上再做2倍、3倍的擴容,防止突然來的高流量衝擊。

最好的辦法是做壓力測試

上面說的是數據庫服務器的併發量預估考慮的內在因素和外在因素,根據這些因素我們便能預估出一臺服務器需要承受的併發量是多大了。但是僅僅是預估,無法達到一個準確的數字,或者說這臺數據庫服務器最大能承受的併發量是多少也是無法知道的。

這裡分享一下個人的一點認識,不足之處歡迎大家拍磚並補充。

僅僅是根據題主的問題是無法直接給出準確的答案的,我相信誰也不敢直接給你下定義去估算一臺數據庫服務器能夠承受的併發量是多少。即使給出了,也無法確保是否有預料之外的情況發生。

題主應該確切的說出你的目的,比如你是為了預估已有系統的的容量和併發瓶頸,還是做新項目的技術選型。另外還需要一系列的基礎數據支撐,才能更好的做出併發估算。

下面咱們一起討論一下,如何做技術選型:

內在因素

在估算之前我們必須清楚這臺數據庫服務器的配置是什麼情況,正常情況下我們需要摸清楚以下幾點因素:

  1. 什麼數據庫?是MySQL還是Oracle亦或是DB2、PostgreSQL等;

  2. 幾核CPU?現代數據庫應用都充分的運用了多核CPU的並行處理能力;

  3. 內存多大?數據庫的索引數據、緩存數據都會進入內存中;

  4. 磁盤IO能力:數據庫文件都存儲在磁盤中,所以磁盤的IO能力將是影響數據庫性能的最直接因素;

  5. 網絡帶寬:網絡的上行和下行帶寬,數據庫服務器可支持的最大連接數是多少。

外在因素

天下武功,唯快不破”。

應用程序開發如此,SQL查詢、操作也是如此。更快意味著服務器資源的快速釋放,以便CPU能繼續處理其他的任務請求。

我們在評估數據庫的併發量的時候,即使數據庫服務器性能再好,你做出的評估如果沒有結合使用數據庫的程序的話,那也是屬於紙上談兵。

結合以下實際情況,可以更準確安全的做數據庫併發量評估或技術選型:

  1. 鏈接數據庫的都有哪些程序?給APP用和給大數據團隊做數據報表分析用完全是兩碼事;

  2. 業務數據量多大?最大的表能達到多少?是否需要分庫?分表?

  3. 平均SQL執行時間多大?

  4. 業務程序總PV能達到多少,每天什麼時間段是高峰期,高峰期持續多久?可以根據高峰期QPS來預估數據庫要承受的併發量,在此基礎上再做2倍、3倍的擴容,防止突然來的高流量衝擊。

最好的辦法是做壓力測試

上面說的是數據庫服務器的併發量預估考慮的內在因素和外在因素,根據這些因素我們便能預估出一臺服務器需要承受的併發量是多大了。但是僅僅是預估,無法達到一個準確的數字,或者說這臺數據庫服務器最大能承受的併發量是多少也是無法知道的。

所以最好的辦法是做數據庫壓力測試,壓力測試的時候,我們可以一點一點的加壓力,逐步的得出數據庫的:

  • QPS:Queries Per Second 每秒處理的查詢數(如果是數據庫,就相當於讀取)

  • TPS:Transactions Per Second 每秒處理的事務數(如果是數據庫,就相當於寫入、修改)

  • IOPS:每秒磁盤進行的I/O操作次數

得出這些數據,便能做到心中有數,也能準確的判斷出能否支撐住接入的程序和業務。

這裡分享一下個人的一點認識,不足之處歡迎大家拍磚並補充。

僅僅是根據題主的問題是無法直接給出準確的答案的,我相信誰也不敢直接給你下定義去估算一臺數據庫服務器能夠承受的併發量是多少。即使給出了,也無法確保是否有預料之外的情況發生。

題主應該確切的說出你的目的,比如你是為了預估已有系統的的容量和併發瓶頸,還是做新項目的技術選型。另外還需要一系列的基礎數據支撐,才能更好的做出併發估算。

下面咱們一起討論一下,如何做技術選型:

內在因素

在估算之前我們必須清楚這臺數據庫服務器的配置是什麼情況,正常情況下我們需要摸清楚以下幾點因素:

  1. 什麼數據庫?是MySQL還是Oracle亦或是DB2、PostgreSQL等;

  2. 幾核CPU?現代數據庫應用都充分的運用了多核CPU的並行處理能力;

  3. 內存多大?數據庫的索引數據、緩存數據都會進入內存中;

  4. 磁盤IO能力:數據庫文件都存儲在磁盤中,所以磁盤的IO能力將是影響數據庫性能的最直接因素;

  5. 網絡帶寬:網絡的上行和下行帶寬,數據庫服務器可支持的最大連接數是多少。

外在因素

天下武功,唯快不破”。

應用程序開發如此,SQL查詢、操作也是如此。更快意味著服務器資源的快速釋放,以便CPU能繼續處理其他的任務請求。

我們在評估數據庫的併發量的時候,即使數據庫服務器性能再好,你做出的評估如果沒有結合使用數據庫的程序的話,那也是屬於紙上談兵。

結合以下實際情況,可以更準確安全的做數據庫併發量評估或技術選型:

  1. 鏈接數據庫的都有哪些程序?給APP用和給大數據團隊做數據報表分析用完全是兩碼事;

  2. 業務數據量多大?最大的表能達到多少?是否需要分庫?分表?

  3. 平均SQL執行時間多大?

  4. 業務程序總PV能達到多少,每天什麼時間段是高峰期,高峰期持續多久?可以根據高峰期QPS來預估數據庫要承受的併發量,在此基礎上再做2倍、3倍的擴容,防止突然來的高流量衝擊。

最好的辦法是做壓力測試

上面說的是數據庫服務器的併發量預估考慮的內在因素和外在因素,根據這些因素我們便能預估出一臺服務器需要承受的併發量是多大了。但是僅僅是預估,無法達到一個準確的數字,或者說這臺數據庫服務器最大能承受的併發量是多少也是無法知道的。

所以最好的辦法是做數據庫壓力測試,壓力測試的時候,我們可以一點一點的加壓力,逐步的得出數據庫的:

  • QPS:Queries Per Second 每秒處理的查詢數(如果是數據庫,就相當於讀取)

  • TPS:Transactions Per Second 每秒處理的事務數(如果是數據庫,就相當於寫入、修改)

  • IOPS:每秒磁盤進行的I/O操作次數

得出這些數據,便能做到心中有數,也能準確的判斷出能否支撐住接入的程序和業務。

常用的壓測工具:

  • sysbench

  • Tpcc-mysql

  • mysqlslap

如何使用的問題大家可以google一下,也可以使用這些工具實驗一下。

沒有固定的公式去計算服務器的併發量,即使相同配置下的不同服務器,也無法做到相同水平的處理能力,必須結合服務器自身的情況和業務的具體情況做大致的預估,並最終進行全場景業務壓力測試來確定具體併發數值。

月球中转站
2019-09-01

你的提問透露了一個問題,你沒有搞清楚併發、響應時間、吞吐量這三者的關係。只考慮併發幾乎沒有實際意義,打個比方,一個系統併發支持到10000,每個響應的平均時間是10000秒,吞吐量也就是1個/秒。有意義嗎?

相關推薦

推薦中...