1. 程式人生 > >mysql 占用大量寫I/O

mysql 占用大量寫I/O

時間 資料 process inf roc lob zabbix commit 一段時間

zabbix告警,發現某臺存放監控數據的數據庫主機CPU的IOwait較高,一直持續較長時間。

登錄服務器查看磁盤IO發現隊列高達90%多,而且經常反復如此

通過iotop查看發現占用io較大的進程是mysql

登錄mysql查看show processlist,發現基本上每次io隊列較高時都是在insert時,以為是插入語句有問題,於是打開mysql慢查詢日誌,觀察一段時間磁盤io仍然較高,但是發現並沒有任何慢查詢語句; 查找關於mysql IO問題優化資料,《【轉載】sync_binlog和innodb_flush_log_at_trx_commit 淺析》說到 sync_binlog和innodb_flush_log_at_trx_commit 兩個參數,這兩個參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數

技術分享圖片

由於這臺主機作為監控服務數據庫,所以在部署之初沒有做太多優化,配置基本保持默認,所以在每次事務提交都對應一次寫操作,導致寫操作太過頻繁。 於是修改sync_binlog和innodb_flush_log_at_trx_commit參數 set global sync_binlog=500; set global innodb_flush_log_at_trx_commit=2;

修改完sync_binlog和innodb_flush_log_at_trx_commit兩個參數後,觀察一段時間發現CPU的IOwait明顯降低

mysql 占用大量寫I/O