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