案例描述:
通過iostat發現儲存的寫效能長期維持在10mb左右,而且因為寫效能差已經導致資料庫效能變差;
兩個小時以後,iostat發現系統的寫效能已經能夠到100mb以上,資料庫效能也恢復正常。
也就是說,在對系統、資料庫監控中,出現了效能波谷,儲存寫入效能嚴重抖動,為什麼?
由上原理圖,進行過程解析:
1、事務提交,修改buffer_pool中的資料形成髒頁,並且同時生成redo日誌,將日誌寫入磁碟redo log中;
2、事務提交成功;
假設,有三組redo log檔案,
3、繼續事務提交,修改資料,寫redo log,如果innodb_log_file_size的數值很小,但是產生的redo日誌資訊很大,這樣第一組redo日誌很快就會被寫滿,就要進行日誌檔案切換;
4、如果三組redo log檔案都被寫滿了,就需要進行日誌覆蓋;
5、如果需要覆蓋的redo log日誌檔案記錄的髒頁資訊還沒有寫入到磁碟中,資料庫就會主動加大寫的力度將髒頁資訊刷到磁碟裡;
6、在將redo日誌檔案對應的髒頁刷入磁碟的過程中,事務沒有辦法提交,影響業務。
二、原理分析
1、通過對redo log的修改時間檢視日誌檔案切換時間
通過shell> ls -l /mydata/ib_logfile*,檢視開始修改的時間和最後修改的時間,計算logfile切換時間。
2、如果redo日誌檔案切換時間過短,也就是切換頻繁,就很容易導致寫抖動
1、正常業務繁忙的會是10-20分鐘;
2、如果是比一般的時間短,說明檔案小,切換頻繁。
三、解決寫抖動問題
1、增加redo日誌檔案數量
mysql> show global variables like 'innodb_log_files_in_group';2、擴大日誌檔案容量+---------------------------+-------+
| variable_name | value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 |
+---------------------------+-------+
1 row in set (0.01 sec)
mysql> show global variables like 'innodb_log_file_size';3、提高log file的寫效能:將日誌檔案放到寫效能優質的磁碟上+----------------------+----------+
| variable_name | value |
+----------------------+----------+
| innodb_log_file_size | 50331648 |
+----------------------+----------+
1 row in set (0.01 sec)
mysql> show global variables like 'innodb_log_group_home_dir';+---------------------------+-------+
| variable_name | value |
+---------------------------+-------+
| innodb_log_group_home_dir | ./ |
+---------------------------+-------+
1 row in set (0.01 sec)
MySQL儲存寫入效能嚴重抖動分析
案例描述 通過iostat發現儲存的寫效能長期維持在10mb左右,而且因為寫效能差已經導致資料庫效能變差 兩個小時以後,iostat發現系統的寫效能已經能夠到100mb以上,資料庫效能也恢復正常。也就是說,在對系統 資料庫監控中,出現了效能波谷,儲存寫入效能嚴重抖動,為什麼?一 原理過程 由上原理圖...
MySQL儲存寫入效能嚴重抖動分析
案例描述 通過iostat發現儲存的寫效能長期維持在10mb左右,而且因為寫效能差已經導致資料庫效能變差 兩個小時以後,iostat發現系統的寫效能已經能夠到100mb以上,資料庫效能也恢復正常。也就是說,在對系統 資料庫監控中,出現了效能波谷,儲存寫入效能嚴重抖動,為什麼?一 原理過程 由上原理圖...
mysql服務抖動 12 mysql效能抖動
12 mysql效能抖動 sql語句為什麼變 慢 了 在介紹wal機制時,innodb在處理更新語句的時候,只做了寫日誌這乙個磁碟操作,就是redo log,在更新記憶體寫完redo log之後,就返回客戶端成功。當記憶體資料頁和磁碟資料頁內容不一致的時候,稱這個記憶體頁為 髒頁 記憶體資料寫入磁碟...