如何計算mysql的IOPS?

今天看到一篇文章說磁碟理論最大IOPS為200左右,我有兩個疑問:

1。MYSQL的IOPS取決於磁碟的IOPS,肯定比磁碟的IOPS小?

2。如果MYSQL的IOPS比磁碟的IOPS小,那一臺伺服器單位時間內處理的請求數也是200左右嗎(預估一個請求會讀取一次資料)?

計算磁碟理論最大IOPS的方法如下:

理論上可以計算出磁碟的平均最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略資料傳輸時間。

假設磁碟平均物理尋道時間為3ms, 磁碟轉速為7200,10K,15K rpm,則磁碟IOPS理論最大值分別為,

IOPS = 1000 / (3 + 60000/7200/2) = 140

IOPS = 1000 / (3 + 60000/10000/2) = 167

IOPS = 1000 / (3 + 60000/15000/2) = 200

回答1:作者:Feng Guangpu

連結:https://www。zhihu。com/question/28111947/answer/39459120

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

1。肯定不會超過磁碟的IOPS

2。不能簡單的IOPS = 1000 ms/ (Tseek + Troatation)計算,因為如果是順序寫Tseek就可以省了,MySQL的IOPS可以透過系統工具觀察(iostat -h),或者透過單位時間內的fsync次數來計算:

mysql> show status like ‘%sync%’;

+————————————————+————-+

| Variable_name | Value |

+————————————————+————-+

| Innodb_data_fsyncs | 27428 |

| Innodb_data_pending_fsyncs | 0 |

| Innodb_os_log_fsyncs | 5172 |

| Innodb_os_log_pending_fsyncs | 0 |

+————————————————+————-+

4 rows in set (0。00 sec)

這裡這有innodb的統計資訊,binlog的沒有統計在內,因此只能粗略計算

回答2:

計算方式從表面上看是對的,但是你是指單盤IOPS嗎?要知道資料庫使用塊狀儲存的話,還取決於:

1、你做的RAID方式,

2、你的儲存頭效能和背板的頻寬,

3、你採用的儲存壓縮模式,

4、你採用的CACHE的尺寸演算法等等,

這些帶沒有合計伺服器對IO的處理能力,所有這些都可以成為最終處理能力的決定因素,如何只從磁碟來說呢?!如果單從一個環節說,那設計最高處理能力肯定是瓶頸,但是這樣的說法在現實中並沒有多大的實際意義。

問2:伺服器是MYSQL的容器,但是伺服器還涉及叢集,如果單機你可以說伺服器的極限也就是MYSQL的極限,叢集就不能了,叢集在節點數是線性的,再往下就會變成節點增長處理能力增加幅度越來越小,超過一定數會變成下降。(由於MYSQL的叢集是SHARE ANYTHING方式,ORACLE RAC也是這樣的)

回答3:

計算方式從表面上看是對的,但是你是指單盤IOPS嗎?要知道資料庫使用塊狀儲存的話,還取決於:

1、你做的RAID方式,

2、你的儲存頭效能和背板的頻寬,

3、你採用的儲存壓縮模式,

4、你採用的CACHE的尺寸演算法等等,

這些帶沒有合計伺服器對IO的處理能力,所有這些都可以成為最終處理能力的決定因素,如何只從磁碟來說呢?!如果單從一個環節說,那設計最高處理能力肯定是瓶頸,但是這樣的說法在現實中並沒有多大的實際意義。

問2:伺服器是MYSQL的容器,但是伺服器還涉及叢集,如果單機你可以說伺服器的極限也就是MYSQL的極限,叢集就不能了,叢集在節點數是線性的,再往下就會變成節點增長處理能力增加幅度越來越小,超過一定數會變成下降。(由於MYSQL的叢集是SHARE ANYTHING方式,ORACLE RAC也是這樣的)

回答4:

從硬體角度,一般伺服器本地硬碟都是2個以上,透過陣列卡來組成RAID。這樣形成的邏輯硬碟效能就會成倍提升。更別提陣列卡還有快取記憶體等效能增強元件。還可以採購專業儲存,進一步提升硬碟元件效能,提供各種快照,複製等企業級功能。最近更是有全快閃記憶體陣列,那IOPS都是百萬級別。

如何計算mysql的IOPS?