今天同事負責的數據庫從庫出現從庫延遲增大,MySQL日志InnoDB: page_cleaner: 1000ms intended loop took 17915ms.
了解原因,keepalived+MySQL主主復制架構,MySQL5.7版本,其中keepalived切換到備庫后,在切換回來導致從庫延遲增大,MySQL日志出現InnoDB: page_cleaner: 1000ms intended loop took 17915ms.
查看服務器top,發現CPU出現大量wait占用
同時,用iostat查看也發現util達到100%
網上查看方法:
1、調整innodb_page_cleaners為更大的值即可,最好保持跟innodb_buffer_pool_instances一致,但是要根據服務器的CPU實際核數調整
2、或者是葉老師寫的 http://blog.itpub.net/7728585/viewspace-2157988/
3、How to solve mysql warning: "InnoDB: page_cleaner: 1000ms intended loop took XXX ms. The settings might not be optimal "? - Stack Overflow https://stackoverflow.com/questions/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx
由於此服務器CPU為2核,內存為8G,並且跑着2個實例。所以硬件資源這塊確實太弱了。
臨時的想法,就是看看MySQL參數sync_binlog、innodb_flush_log_at_trx_commit是否設置的雙1,改成0和2后,發現沒有好轉。看來硬件是沒法在優化了,對服務器進行升級(雲服務器)后從庫性能恢復,開始猛追數據。