mysql髒頁 MySQL效能調優 髒頁重新整理

2021-10-17 13:54:15 字數 985 閱讀 6302

原理

當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為「髒頁」。記憶體資料寫入到磁碟後,記憶體和磁碟上的資料頁的內容就一致了,稱為「乾淨頁」。

當要讀入的資料頁沒有在記憶體的時候,就必須到緩衝池中申請乙個資料頁。這時候只能把最久不使用的資料頁從記憶體中淘汰掉:如果要淘汰的是乙個乾淨頁,就直接釋放出來復用;但如果是髒頁呢,就必須將髒頁先刷到磁碟,變成乾淨頁後才能復用。

所以以下這兩種情況,都是會明顯影響效能的:乙個查詢要淘汰的髒頁個數太多,會導致查詢的響應時間明顯變長;

日誌寫滿,更新全部堵住,寫效能跌為 0,這種情況對敏感業務來說,是不能接受的。

所以,innodb 需要有控制髒頁比例的機制,來盡量避免上面的這兩種情況。

配置調優 - innodb_io_capacity

innodb_io_capacity預設是200,單位是頁,該引數的設定大小取決於硬碟的iops,即每秒每秒的輸入輸出量(或讀寫次數)

它會告訴 innodb 磁碟能力,所以把這個值設定成磁碟的 iops。

磁碟的 iops 可以通過 fio 這個工具來測試,下面的語句用來測試磁碟隨機讀寫的命令:fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500m -numjobs=10 -runtime=10 -group_reporting -name=mytest

配置調優 - innodb_flush_neighbors

innodb儲存引擎還提供了flush neighbor page(重新整理鄰接頁)的特性。其工作原理為:當重新整理乙個髒頁時,innodb儲存引擎會檢測該頁所在區(extent)的所有頁,如果是髒頁,那麼一起進行重新整理。

innodb1.2.x版本開始提供了引數innodb_flush_neighbors,用來控制是否啟用該特性。對於傳統機械硬碟建議啟用該特性,而對於固態硬碟有著較高的iops效能的磁碟,則建議將該引數設定為0,即關閉該特性。

mysql 檢視 髒頁 MySQL 刷髒頁

1.髒頁,乾淨頁 當記憶體資料頁和磁碟資料頁上的內容不一致時,我們稱這個記憶體頁為髒頁 記憶體資料寫入磁碟後,記憶體頁上的資料和磁碟頁上的資料就一致了,我們稱這個記憶體頁為乾淨頁。2.刷髒頁的時機 2.1 redo log redo log 是迴圈寫的,當redo log 寫滿了,即 write p...

mysql 髒頁重新整理 InnoDB髒頁重新整理機制

我們知道innodb採用write ahead log策略來防止宕機資料丟失,即事務提交時,先寫重做日誌,再修改記憶體資料頁,這樣就產生了髒頁。既然有重做日誌保證資料永續性,查詢時也可以直接從緩衝池頁中取資料,那為什麼還要重新整理髒頁 到磁碟呢?如果重做日誌可以無限增大,同時緩衝池足夠大,能夠快取所...

MySQL 刷髒頁問題

mysql的刷髒頁問題 平時的工作中,不知道你有沒有遇到過這樣的場景,一條 sql 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到...