日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

了解mysql脏页落盘过程

發(fā)布時間:2023/12/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解mysql脏页落盘过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

臟頁落盤

什么是臟頁?

對數據的修改,首先改內存中的緩沖池的頁,由于緩沖池的數據跟磁盤中的數據不一致,所以稱緩沖池的頁為臟頁

臟頁如何寫入到磁盤?

不是每次更新都觸發(fā)臟頁落盤,而是通過CheckPoint機制刷新磁盤。

InnoDB數據落盤流程(大概)

為什么性能好

  • 從流程中,可以看到,事務的操作全是在內存中進行,所以性能好。

如何持久化

  • 在修改緩沖區(qū)之前,所有操作先寫入Log Buffer,提交事務之前持久化到Redio日志,后面通過CheckPoint機制,將臟頁落盤。

如何保證數據安全

  • Write Ahead Log 策略(日志先行)。
  • Force Log at Commit機制(提交事務時,將日志寫入到磁盤)。
  • CheckPoint機制。
  • 雙寫機制:臟頁拷貝到雙寫緩沖區(qū)之后,持久化到對應系統表空間的位置,然后把臟頁更新到獨立表空間,最后清除Redo日志。

為什么不馬上更新到磁盤?

  • 因為每次頁的更新,都落盤的話,必將伴隨4次磁盤IO,性能不會很高,隨著寫入操作的增加,性能指數下降。

如何確保日志安全進入磁盤?

  • 日志寫入Log Buffer之后,調用fsync函數確保日志從緩存寫入磁盤。

fsync的功能是確保文件fd所有已修改的內容已經正確同步到硬盤上,該調用會阻塞等待直到設備報告IO完成。

Redo日志落盤策略

寫入磁盤時機由 innodb_flush_log_at_trx_commit 控制。

  • 0:每秒寫入,跟事務無關,最多丟失1秒的的事務操作。
  • 1:事務提交時寫入磁盤,不丟失數據,效率也是最低。
  • 2:事務提交,寫入OS Buffer,間隔1秒寫入,性能、安全性相比前兩個居中。

CheckPoint機制

解決了什么問題

對緩沖池的操作,避免了直接修改磁盤,但是數據最終還是要寫入到磁盤,通過此機制,不斷將臟頁落盤,這樣可以減少Redo日志大小,在宕機的時候不用重做所有日志;
同時可以緩解緩沖池內存不夠用的情況;
刷新臟頁,還可以循環(huán)使用Redo日志,不會無限增大。

分類

sharp checkpoint:關閉數據庫時,將緩沖池的臟頁全部刷新到磁盤。
fuzzy checkpoint:數據庫運行期間,選擇不同時機將部分臟頁寫入磁盤。避免刷新全部帶來的性能問題。

  • Master Thread Checkpoint:固定頻率刷新部分臟頁到磁盤,異步操作不會阻塞用戶線程。
  • FLUSH_LRU_LIST Checkpoint:緩沖池淘汰非熱點Page,如果該Page是臟頁會執(zhí)行CheckPoint。
  • Async/Sync Flush Checkpoint:redo日志不可用時,強制臟頁落盤,有了前兩個這種一般不會發(fā)生。
  • Dirty Page too much Checkpoint:臟頁占比太多強制進行刷盤,閾值75%

Double Write機制

如果寫入臟頁時發(fā)生宕機怎么辦法?
我們在修改更新Redo日志時,先將緩沖池的臟頁拷貝到雙寫緩沖區(qū),然后將數據順序寫到系統表空間的雙寫緩沖區(qū),再離散寫入獨立表空間。這樣,即使發(fā)生宕機,數據也能從系統表空間中恢復。
(順序寫的速度是很快的)

Redo日志只記錄對頁的修改而非數據本身。


從緩沖池復制到雙寫緩沖區(qū) -> 順序寫入系統表空間 -> 離散寫入獨立表空間。

總結

以上是生活随笔為你收集整理的了解mysql脏页落盘过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。