欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL之undo日志頁結構詳解

 更新時間:2025年06月26日 08:51:40   作者:在成都搬磚的鴨鴨  
這篇文章主要介紹了MySQL之undo日志頁結構,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、背景

之前講過undo日志類型,本篇文章再來具體講解一下undo日志頁結構。

2、undo日志頁結構

【1】FIL_PAGE_UNDO_LOG頁

InnoDB中最基本的存儲單位是頁,undo日志也是存儲在頁上的,頁的類型為FIL_PAGE_UNDO_LOG,其頁面結構如下:

在這里插入圖片描述

其中Undo Page Header是undo日志所特有的,其結構如下:

在這里插入圖片描述

字段含義為:

字段字節(jié)大小含義
TRX_UNDO_PAGE_TYPE2本頁存儲undo日志類型,分為兩大類:TRX_UNDO_INSET和TRX_UNDO_UPDATE,一個頁面只能存儲一種類型
TRX_UNDO_PAGE_START2本頁中第一條undo日志地址
TRX_UNDO_PAGE_FREE2本頁可以寫入undo日志的空閑地址
TRX_UNDO_PAGE_NODE12鏈表節(jié)點

【2】undo頁面組成的鏈表

通過Undo Page Header的TRX_UNDO_PAGE_NODE屬性能讓undo頁組成一個鏈表,鏈表中的第一個頁被稱為first undo page,第二個頁被稱為normal undo page,上面講過有兩大類undo日志類型,一個頁只能存儲相同的頁類型,所以一個事務的所有插入操作可以組成一個insert undo鏈表,所有刪除和更新操作可以組成一個update undo鏈表,臨時表也需要記錄undo日志,所以一個事務可能產生四個undo頁組成的鏈表,這些鏈表是用到的時候再分配。

【3】Undo Log Segment

每個undo日志頁組成的鏈表都對應一個,叫Undo Log Segment,這個段存儲在鏈表的第一個頁也就是first undo page頁中,其結構如下:

在這里插入圖片描述

其中Undo Log Segment header用來存儲段結構信息,其結構如下:

在這里插入圖片描述

字段含義如下:

字段字節(jié)大小含義
TRX_UNDO_STATE2鏈表對應的段狀態(tài):
TRX_UNDO_ACTIVE:活躍狀態(tài),一個活躍的事務正在往這個段里面寫入undo日志
TRX_UNDO_CACHED:被緩存的狀態(tài),該undo頁面對應的來吧等待被其它實物重用
TRx_UNOD_To_FREE:對insert undo鏈表來說,在它對應的事務提交之后,該鏈表不能被重用就處于這種狀態(tài)
TRX_UNDO_TO_PURGE:對update undo鏈表來說,在它對應的事務提交之后,該鏈表不能被重用就處于這種狀態(tài)
TRX_UNDO_PREPARED:包含處于PREPARE階段的事務產生的undo日志
TRX_UNDO_LAST_LOG2本undo頁面鏈表中最后一個Undo Log header的位置
TRX_UNDO_FSEG_HEADER10本undo頁鏈表對應的段信息
TRX_UNDO_PAGE_LIST16undo頁鏈表基節(jié)點,這個基節(jié)點就存在于first undo page頁中

【4】Undo Log Header

同一個事務向同一個undo頁面鏈表中寫入的undo日志算一個組,組信息存儲在鏈表第一個頁的Undo Log Header屬性中,first undo page頁可以這樣表示:

在這里插入圖片描述

Undo Log Header結構如下:

在這里插入圖片描述

字段含義如下:

字段字節(jié)大小含義
TRX_UNDO_TRX_ID8生成本組undo日志的事務id
TRX_UNDO_TRX_NO8事務提交后生成的序號,用來標記事務的提交順序
TRX_UNDO_DEL_MARKS2標記本組undo日志是否包含由于Delete mark操作產生的undo日志
TRX_UNDO_LOG_START2本組undo日志第一條undo日志在頁面中的地址
TRX_UNDO_XID_EXISTS1本組undo日志是否包含XID信息
TRX_UNDO_DICT_TRANS1標記本組undo日志是不是由DDL語句產生
TRX_UNDO_TABLE_ID8DDL語句操作的表table_id
TRX_UNDO_NEXT_LOG2下一組undo日志在頁面中開始的偏移量
TRX_UNDO_PREV_LOG2上一組undo日志在頁面中開始的偏移量
TRX_UNDO_HISTORY_NODE12History鏈表的節(jié)點

【5】重用undo頁面

為了節(jié)省空間就有了重用undo頁面,重用undo頁面需要滿足以下條件:

  • 1、undo頁面鏈表只包含一個undo頁面
  • 2、該undo頁面鏈表使用空間超過該頁面空間的3/4
  • 3、insert undo鏈表是覆蓋寫入
  • 4、update undo鏈表是追加寫入

3、總結

通過undo日志能保證事務回滾,也就是原子性,上面講過insert操作對應的undo日志可以直接刪除,update和delete操作的不能,就是為了MVCC,多版本并發(fā)控制,后面再來講解MVCC。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論