事務(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相繼推出自己的多版本併發控制技術,這一技術的核心是在發生讀寫衝突時候,讀操作...