InnoDB儲存引擎 Checkpoint技術

2021-08-15 16:34:23 字數 1835 閱讀 9312

緩衝池的設計是為了協調cpu速度和磁碟速度不一致,對於頁的操作首先都會在緩衝池中進行。當我們執行update操作時,改變了頁中的記錄,那此時的頁就是髒頁,即緩衝池中的頁的資料比磁碟的新。資料庫需要把新資料重新整理到磁碟,以滿足資料一致性。

如果是乙個頁發生變化,就把新資料刷回磁碟,這個開銷是非常大的。而且如果在將資料重新整理到磁碟的過程中發生了宕機,那麼資料就不能恢復了。

為了避免資料丟失,事務資料庫系統普遍採用write ahead log策略,即當事務提交時,先寫重做日誌,再修改頁。當發生宕機而導致資料丟失時,通過重做日誌來完成資料的恢復。

如果重做日誌可以無限增大,同時緩衝池也足夠大,能夠快取資料庫中的所有資料,那麼我們就不需要再把緩衝池中頁中的新版本重新整理回磁碟。因為發生宕機時,我們可以通過重做日誌來恢復。

但一般這種情況是不滿足的,首先如果要使緩衝池能夠快取資料庫的所有資料,那資料庫的容量要求很大,當前3tb的mysql資料庫並不少見,但是3tb的記憶體卻非常少見。重做日誌無限增大也許是可以的,但是成本會非常高,同時也不便於運維。

checkpoint技術的目的就是解決以下問題:

縮短資料庫恢復時間

緩衝池不夠用時,將髒頁重新整理回磁碟

重做日誌不可用時,將髒頁重新整理回磁碟

當資料庫發生宕機時,不需要執行所有的重做日誌,因為checkpoint之前的頁都已經重新整理回磁碟。資料庫只需要對checkpoint後的重做日誌進行恢復即可,這大大的縮短了恢復的時間。

當緩衝池不夠用時,根據lru演算法會溢位最近最少使用的頁,若此頁為髒頁,那麼需要強制執行checkpoint,將髒頁重新整理回磁碟。

重做日誌出現不可用的情況是因為當前事務資料庫系統對重做日誌的設計都是迴圈使用的,並不是讓其無限增大的,這從成本以及管理上都是比較困難的。重做日誌被重用的部分,是指這部分的重做日誌已經不再需要,即發生宕機時,不再用來恢復資料,可以被覆蓋重用。若此時重做日誌還需要使用,那麼必須強制產生checkpoint,將緩衝池中的頁至少重新整理到當前重做日誌的位置。

對於innodb儲存引擎而言,其是通過lsn(log sequence number)來標記版本的,lsn是8位元組的數字,其單位是位元組。每個頁有lsn,重做日誌有lsn,checkpoint也有lsn。

通過show engine innodb status;命名檢視

——log——

log sequence number 164641265

log flushed up to 164641265

pages flushed up to 164641265

last checkpoint at 164641256

0 pending log flushes, 0 pending chkp writes

10 log i/o』s done, 0.00 log i/o』s/second

簡單來說,checkpoint所做的事情就是將緩衝池中的髒頁重新整理回磁碟。

每次重新整理多少頁到磁碟,每次從**取臟頁,以及什麼時間觸發checkpoint,這些是有一定差別的。

在innodb儲存引擎內部,有兩種checkpoint

sharp checkpoint 重新整理所有髒頁

fuzzy checkpoint 重新整理一部分髒頁

sharp checkpoint:預設的方式,資料庫關閉時將所有的髒頁都重新整理回磁碟。

引數innodb_fast_shutdown = 1

sharp checkpoint這種方式顯然會影響到資料庫的可用性,所以在innodb儲存引擎內部使用fuzzy checkpoint進行頁的重新整理,即只重新整理一部分髒頁。

InnoDB 儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...

InnoDB 儲存引擎

設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...

InnoDB儲存引擎

內外存交換的基本單位 mysql將資料從外存讀入記憶體不是以記錄為單位,這樣消耗太大,是以頁為單位,每個頁裡填充記錄。每頁大小為16kb。記錄堆 行記錄儲存區,分為有效記錄和已刪除記錄兩種 自由空間鍊錶 已刪除記錄組成的鍊錶 未分配空間 頁尾 儲存頁面校驗資訊 頁內的資料是按照主鍵的順序有序儲存的。...