InnoDB事務和MVCC實現

2021-10-02 02:46:00 字數 624 閱讀 1909

事務(acid)定義:

事務實現:

舉個栗子:

a:1000元 b:1000元,兩人轉賬時底層是如何操作的

1. undo記錄a=1000元,set a=500元(在記憶體中進行),redo記錄a=500元

2. undo記錄b=1000元,set b=1500元(在記憶體中進行),redo記錄b=1500元

3. 成功:重新整理redo日誌到資料庫中,失敗重新整理undo日誌到資料庫

4. commit事務

多版本併發控制(mvcc)

因為資料中存在共享鎖和排他鎖,而二者是互斥的關係。在查詢時會獲得共享鎖,修改時會獲取排他鎖,這按理來說會阻塞。但mysql做了乙個處理使得二者可以同時進行。

當進行修改時,生成了undo和redo日誌,而併發讀讀的就是這個undo日誌,所以讀到的是修改前的資料。

innoDB的MVCC實現方式

innodb的mvcc是通過在每行記錄後面儲存兩個隱藏的列來實現。乙個儲存行的建立時間,乙個儲存行的過期時間,儲存的值為系統版本號。每開啟乙個新的事務,系統版本號都會自動增加。在repeatable read隔離級別下,mvcc的具體操作 insert delete update 儲存這兩個額外系統...

簡述 InnoDB 對 MVCC 的實現

分為兩個要點簡述 要點一 行記錄的歷史版本是什麼樣子的?innodb 將行記錄及其歷史行記錄通過隱藏字段 data roll ptr 鏈成乙個鍊錶。歷史行記錄其實就是 undo log,放在共享表空間的 undo 段。要點二 當前事務進行快照讀時,如何選擇歷史版本?每個行記錄及其歷史行記錄都有乙個隱...

mvcc原理 Innodb的MVCC原理

該文章是 innodb的mvcc簡介 中的細節作出解釋。在mvcc出現之前的資料庫,為了實現一致性讀,如sqlserver,db2均採用鎖定讀技術,寫操作往往會阻塞讀操作,導致資料庫併發效能不高。oracle與postgre相繼推出自己的多版本併發控制技術,這一技術的核心是在發生讀寫衝突時候,讀操作...