2017年10月11日 星期三

[MySQL]預設innodb_log_file_size太小,對IO影響有多大呢?

       基本上innodb_log_file_size我從沒用過預設值,一般來說都要求要能夠撐住1小時的寫入量,同事管的一台MySQL有效能上的問題,請我幫忙看,iostat看了一下還滿忙的,IOPS在1000~3000左右,IO吞吐量介於25MB~80MB,幾乎全是寫IO為主,以SAS 15000轉RAID 10來說算忙碌的,但看起來IO還不至於撐不住,看了一下MySQL內讀寫比為8:2,比對OS的顯得不太合理,寫IO怎麼會那麼重,再看一下設定,innodb_log_file_size居然用預設值,只有5MB,2個也不過10M,算了一下適當的大小應該要1.4G,10M對1.4G這也差太多了,log file豈不是一直被替換,寫IO這麼忙應該是這個問題,請同事找時間先改成1G看看,那改了之後IO差多少呢?

       下圖是PMM的監控項,時間範圍涵蓋更改innodb_log_file_size的前後時間段,看中間的兩個圖分別是IO吞吐量跟IOPS,更改innodb_log_file_size後的數據讓我嚇了一跳,同樣的QPS下,IO變得一點都不忙碌了,也差太多


       那如何計算innodb_log_file_size的大小呢?可參考Calc_innodb_log_file_size.sh