中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

InnoDB臟頁刷新機制的原理

發布時間:2021-08-31 09:30:48 來源:億速云 閱讀:147 作者:chen 欄目:MySQL數據庫

這篇文章主要講解了“InnoDB臟頁刷新機制的原理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“InnoDB臟頁刷新機制的原理”吧!

我們知道InnoDB采用Write Ahead Log策略來防止宕機數據丟失,即事務提交時,先寫重做日志,再修改內存數據頁,

這樣就產生了臟頁。既然有重做日志保證數據持久性,查詢時也可以直接從緩沖池頁中取數據,那為什么還要刷新臟頁

到磁盤呢?如果重做日志可以無限增大,同時緩沖池足夠大,能夠緩存所有數據,那么是不需要將緩沖池中的臟頁刷新

到磁盤。但是,通常會有以下幾個問題:

服務器內存有限,緩沖池不夠用,無法緩存全部數據

重做日志無限增大成本要求太高

宕機時如果重做全部日志恢復時間過長

事實上,當數據庫宕機時,數據庫不需要重做所有的日志,只需要執行上次刷入點之后的日志。這個點就叫做Checkpoint,

它解決了以上的問題:

縮短數據庫恢復時間

緩沖池不夠用時,將臟頁刷新到磁盤

重做日志不可用時,刷新臟頁

重做日志被設計成可循環使用,當日志文件寫滿時,重做日志中對應數據已經被刷新到磁盤的那部分不再需要的日志可以被

覆蓋重用。

InnoDB引擎通過LSN(Log Sequence Number)來標記版本,LSN是日志空間中每條日志的結束點,用字節偏移量來表示。

每個page有LSN,redo log也有LSN,Checkpoint也有LSN。可以通過命令show engine innodb status來觀察:

---

LOG

---

Log sequence number 11102619599

Log flushed up to   11102618636

Last checkpoint at  11102606319

0 pending log writes, 0 pending chkp writes

15416290 log i/o's done, 12.32 log i/o's/second

Checkpoint機制每次刷新多少頁,從哪里取臟頁,什么時間觸發刷新?這些都是很復雜的。有兩種Checkpoint,分別為:

Sharp Checkpoint

Fuzzy Checkpoint

Sharp Checkpoint發生在關閉數據庫時,將所有臟頁刷回磁盤。在運行時使用Fuzzy Checkpoint進行部分臟頁的刷新。

部分臟頁刷新有以下幾種:

Master Thread Checkpoint

FLUSH_LRU_LIST Checkpoint

Async/Sync Flush Checkpoint

Dirty Page too much Checkpoint

Master Thread Checkpoint

Master Thread以每秒或每十秒的速度從緩沖池的臟頁列表中刷新一定比例的頁回磁盤。這個過程是異步的,不會阻塞查詢

線程。

FLUSH_LRU_LIST Checkpoint

InnoDB要保證LRU列表中有100左右空閑頁可使用。在InnoDB1.1.X版本前,要檢查LRU中是否有足夠的頁用于用戶查詢

操作線程,如果沒有,會將LRU列表尾端的頁淘汰,如果被淘汰的頁中有臟頁,會強制執行Checkpoint刷回臟頁數據到

磁盤,顯然這會阻塞用戶查詢線程。從InnoDB1.2.X版本開始,這個檢查放到單獨的Page Cleaner Thread中進行,

并且用戶可以通過innodb_lru_scan_depth控制LRU列表中可用頁的數量,默認值為1024。

Async/Sync Flush Checkpoint

是指重做日志文件不可用時,需要強制將臟頁列表中的一些頁刷新回磁盤。這可以保證重做日志文件可循環使用。

在InnoDB1.2.X版本之前,Async Flush Checkpoint會阻塞發現問題的用戶查詢線程,Sync Flush Checkpoint會阻塞

所有查詢線程。InnoDB1.2.X之后放到單獨的Page Cleaner Thread。

Dirty Page too much Checkpoint

臟頁數量太多時,InnoDB引擎會強制進行Checkpoint。目的還是為了保證緩沖池中有足夠可用的空閑頁。其可以通過

參數innodb_max_dirty_pages_pct來設置:

mysql> show variables like 'innodb_max_dirty_pages_pct';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| innodb_max_dirty_pages_pct | 60    |

+----------------------------+-------+

感謝各位的閱讀,以上就是“InnoDB臟頁刷新機制的原理”的內容了,經過本文的學習后,相信大家對InnoDB臟頁刷新機制的原理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中超| 雅江县| 秀山| 松潘县| 武城县| 华亭县| 岱山县| 沾化县| 永福县| 谢通门县| 赤城县| 通榆县| 文山县| 纳雍县| 六枝特区| 德阳市| 南通市| 北安市| 巍山| 简阳市| 凌源市| 甘洛县| 临邑县| 临猗县| 陆丰市| 达拉特旗| 广安市| 文水县| 汪清县| 治县。| 始兴县| 包头市| 四平市| 凤城市| 农安县| 城步| 突泉县| 论坛| 中超| 墨玉县| 吉木萨尔县|