InnoDB實現MVCC(多版本並發控制)它存儲了每一行的三個額外的隱藏字段


1.DB_TRX_ID:一個6byte的標識,每處理一個事務,其值自動+1
#下面提到的“創建時間”和“刪除時間”記錄的就是這個DB_TRX_ID的值
#如insert、update、delete操作時,刪除操作用1個bit表示。 
#DB_TRX_ID是最重要的一個,可以通過語句“show engine innodb status”來查找 


2.DB_ROLL_PTR: 大小是7byte,指向寫到rollback segment(回滾段)的一條undo log記錄
 (update操作的話,記錄update前的ROW值)

3.DB_ROW_ID: 大小是6byte,該值隨新行插入單調增加。
  #當由innodb自動產生聚集索引時聚集索引(即沒有主鍵時,因為MYSQL默認聚簇表,會自動生成一個ROWID)
  #包括這個DB_ROW_ID的值,
  #不然的話聚集索引中不包括這個值,這個用於索引當中。

DB_TRX_ID記錄了行的創建的時間刪除的時間在每個事件發生的時候,每行存儲版本號,而不是存儲事件實際發生的時間。

每次事物的開始這個版本號都會增加。自記錄時間開始,每個事物都會保存記錄的系統版本號。
依照事物的版本來檢查每行的版本號。

在insert操作時 “創建時間”=DB_TRX_ID,這時,“刪除時間”是未定義的;在update時,復制新增行的“創建時間”=DB_TRX_ID,刪除時間未定義,舊數據行“創建時間”不變,
刪除時間=該事務DB_TRX_ID;delete操作,相應數據行的“創建時間”不變,刪除時間=該事務的DB_ROW_ID;select操作對兩者都不修改,只讀相應的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM