閱讀筆記-mysql innodb併發控制實現方式

參考:https://mp.weixin.qq.com/s/R3yuitWpHHGWxsUcE0qIRQ,文中例子截取自上文

redo、undo、回滾段

  • redo:主要解決如果每次修改數據都去磁盤上隨機讀寫,效率很低。所以改爲順序寫入到redo日誌中然後定期去修改磁盤。即使是數據庫奔潰也可以依靠redo重做。保證事務的acid
  • undo:在事務提交之前,會將修改的舊數據存放到undo日誌中,新數據記錄到redo中。可以利用undo日誌來回滾。
  • 回滾段:存儲undo日誌的地方
  • 下面是一個例子,很清楚的說明其中的關係
    在這裏插入圖片描述
    在這裏插入圖片描述

innodb實現多版本併發控制

  • 關鍵:舊版本數據存放在回滾段中,同時這種架構對mysql衝擊不大
  • 每行數據會記錄:
    • DB_TRX_ID,最近一次修改它的事務ID;
    • DB_ROLL_PTR,指向undo的指針;
    • DB_ROW_ID,單調遞增的行ID;
  • 通過這種方式就可以再undo中獲取到歷史數據的快照,叫快照讀
  • 一般情況下select語句直接讀快照,當然也可以獲取排它鎖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章