MySQL性能調優-髒頁刷新

原理

當內存數據頁跟磁盤數據頁內容不一致的時候,我們稱這個內存頁爲“髒頁”。內存數據寫入到磁盤後,內存和磁盤上的數據頁的內容就一致了,稱爲“乾淨頁”。

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

所以以下這兩種情況,都是會明顯影響性能的:

  1. 一個查詢要淘汰的髒頁個數太多,會導致查詢的響應時間明顯變長;
  2. 日誌寫滿,更新全部堵住,寫性能跌爲 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,即關閉該特性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章