redo在ACID中作用,及一些概念

2022-05-15 16:39:30 字數 1860 閱讀 3824

以下涉及檔案在mysql配置的data資料目錄下

1. redo log概念: 重做日誌

ib_logfile0 和 ib_logfile1 兩個檔案預設50m,用於儲存redo log日誌,輪詢使用的,0滿了用1, 1滿了重用0;

redo log的兩個檔案用於記錄資料的變更,即髒頁資料是如何變化而來的。首先是記錄在redo log buffer中,在寫回到redo檔案中。

2. redo log buffer 概念:即redo記憶體緩衝區域。

3. data buffer poll 概念: 資料和索引緩衝池,即ibd檔案的緩衝池。(髒頁就發生在這裡,redo log buffer中記錄的也是這裡的變化)

4. lsn概念: log sequence number日誌序列號 

lsn號存在於每個page中(構成ibd的單元,16kb大小,連續的64個構成區),redo log有關的兩個檔案中也有,

redo log buffer中也有, data buffer poll中也有.

5. mysql每次重啟, 必須比對ibd中page和redo log有關的兩個檔案中儲存的lsn號,必須要求兩者一致(能恢復一致), 才能正常啟動。

即要求ibd檔案和ib_logfile0/1檔案中的必須一致(或能恢復一致)。不一致時觸發csr機制

10. wal概念:write ahead log日誌優先寫。

日誌優先於資料寫入磁碟的,持久化的機制。

11. 髒頁:

記憶體髒頁,記憶體中資料改變了,沒寫入磁碟之前,我們把記憶體頁稱之為髒頁。

12. ckpt概念: checkpoint(檢查點), 就是將髒頁寫到磁碟的動作。

13. txid概念: 事務號,innodb會為每個事務生成乙個事務號,伴隨著整個事務的生命週期。

14. csr機制概念:

mysql資料庫在重啟時會校驗ibd檔案和ib_logfile0/1檔案中儲存的lsn日誌序列號, 如果logfile中的版本優於ibd記錄的版本,則會:

1. 載入ibd資料到data buffer poll中,載入ib_logfile0/1中記錄的變更日誌到redo log buffer中,使用日誌重新構造出髒頁資料

並立即觸發ckpt機制, 將構造出的髒頁資料寫會到磁碟中,同時會同步lsn日誌序列號保持和ib_logfile0/1一致。

總結:redo log , redo log buffer, ibd, data buffer poll在乙個事務中都幹了什麼?

1. 把事務中涉及到的資料行所在ibd page頁整個16kb大小的內容及lsn號載入到data buffer poll中

2. 修改data buffer poll中的資料及lsn號累加1.

3. redo log buffer緩衝區中會記錄data buffer poll中的資料變化日誌及lsn號

4. commit遞交時,mysql的wal機制使日誌優先於資料寫入磁碟(即redo log中,帶lsn號),並返回事務成功提示。

如果此時突然宕機,我們重啟資料庫時這四個又會發生什麼變化?

1. 資料庫重啟時會對比ibd中lsn號和redo log中記錄的lsn號,如果不一致會觸發csr機制,如下:

載入redo log中日誌資訊到redo log buffer中, 載入ibd資料到data buffer poll中,使用redo log buffer中的日誌資訊

在data buffer poll中構造出髒頁資訊,並立即觸發ckpt機制,把髒頁資料及lsn號寫回到磁碟(ibd檔案中)。

2. 此時重新檢查ibd和ib_logfile0/1中的lsn號是否一致, 一致則資料庫啟動成功,不一致則失敗。

robots的一些作用及用法

在國內,管理者似乎對robots.txt並沒有引起多大重視,應一些朋友之請求,今天想通過這篇文章來簡單談一下robots.txt的寫作。robots.txt基本介紹 當乙個搜尋機械人 有的叫搜尋蜘蛛 訪問乙個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜尋機械人就會按照...

ioctl在socket中的一些用法及示例

ioctl在socket中的一些用法及示例 ioctl在socket中的一些用法及示例 函式 ioctl int fd,int request,void arg 定義 功能 控制i o裝置,提供了一種獲得裝置資訊和向裝置傳送控制引數的手段.引數 int fd 檔案控制代碼.用於socket時,是so...

ioctl在socket中的一些用法及示例

ioctl在socket中的一些用法及示例 函式 ioctl int fd,int request,void arg 定義 功能 控制i o裝置,提供了一種獲得裝置資訊和向裝置傳送控制引數的手段.引數 int fd 檔案控制代碼.用於socket時,是socket套接字.int request 函式...