天天看點

Mysql 45講學習筆記(十二)MySQL會“抖”一下

一.場景

場景很難複現,持續時間短。

産生原因:

  • InnoDB處理更新語句時候,隻做寫日志這個磁盤操作。這個日志叫做redo log(重做日志)
  • 在更新記憶體寫完redo log後,傳回給用戶端,本次更新成功

當記憶體寫滿,不得不同步至記憶體時候,就會比較緩慢

   flush就是記憶體的資料寫入磁盤中

  • 髒頁:當記憶體資料頁和磁盤資料頁不一緻的時候
  • 幹淨頁:當記憶體 和磁盤上的資料頁的内容一緻

二.産生刷髒頁的場景

  • redo log滿了,系統要停止所有更新操作,将checkpoint 往前推進,redo log 留出空間可以繼續寫。
  • 系統記憶體不足,需要新的記憶體頁,記憶體不足時候需要淘汰資料頁,将髒頁寫到磁盤中
  • MySQL 認為系統“空閑”的時
  • MySQL 正常關閉時

前兩種情況分析:

  • redo log寫滿了,要刷flush髒頁,這種情況InnoDB要盡量避免,系統不再接受更新,所有更新都必須堵住
  • 記憶體不夠用了,将髒頁寫到磁盤,這種情況是常态

InnoDB用緩存池(buffer pool)管理記憶體,緩存池中的記憶體頁有三種狀态:

  • 未使用
  • 使用了都是幹淨頁
  • 使用了但是都是髒頁

InnoDB政策時盡量使用記憶體,對于一個長時間運作的庫來說,未被使用 的頁面很少

  1. 要淘汰的髒頁太多,導緻查詢響應時間明顯變長
  2. 日志寫滿,更新全部堵住,寫性能跌為0

三.InnoDB刷髒頁的控制政策 

  • 值建議設定成磁盤的IOPS
  • 磁盤的IOPS可以用fio工具測試