mysql什么情况会刷脏页_mysql-刷脏页(12)
一,mysql因為WAL機制,在更新時,首先會更新內存,再寫redo log。一般情況下是在空閑時,將redo log刷新到磁盤中。
二,什么是臟頁。當內存中與磁盤中的數據不一致時,內存中的數據頁就稱為臟頁。(也可以理解為redo log還沒更新到磁盤中)
三,什么時候會觸發數據庫flush(刷臟頁):
1,redo log寫滿,系統會停止一切更新操作;
2,mysql認為空閑的時候,主動去刷新;
3,系統內存不足。當需要新的內存頁,而內存不夠用的時候,就要淘汰一些數據頁,空出內存給別的數據頁使用。如果淘汰的是“臟頁”,就要先將臟頁寫到磁盤。
4,MySQL正常關閉的情況。這時候,MySQL會把內存的臟頁都flush到磁盤上,這樣下次MySQL啟動的時候,就可以直接從磁盤上讀數據,啟動速度會很快。
四,控制刷臟頁的策略:
1,正確設置innodb_io_capacity參數,它會告訴InnoDB你的磁盤能力。合理地設置innodb_io_capacity的值,并且平時要多關注臟頁比例,不要讓它經常接近75%。
2,indodb刷臟頁會涉及“連坐”操作,即如果刷新某個臟頁,判斷連續的數據頁是否也是臟頁,一直循環,這樣無疑會提高io效率,會減少很多隨機io,而刷臟頁的過程由于會占用資源,可能會讓你的更新和查詢語句的響應時間長一些。參數innodb_flush_neighbors 為1 代表開啟連坐機制,0為關閉。在MySQL 8.0中,innodb_flush_neighbors參數的默認值已經是0了。
總結
以上是生活随笔為你收集整理的mysql什么情况会刷脏页_mysql-刷脏页(12)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: strictmath_Java Stri
- 下一篇: linux cmake编译源码,linu