日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MySQL 高级 —— MVCC 多版本并发控制

發布時間:2025/3/12 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 高级 —— MVCC 多版本并发控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

MySQL的大多數事務型存儲引擎實現的都不是簡單的行級鎖。基于提升并發性能的考慮,它們一般都同時實現了多版本并發控制——MVCC。包括其他數據庫如Oracle等,由于MVCC并沒有一個統一的實現標準,因此它們的實現原理都不盡相同。

MVCC簡介

可以認為MVCC是行級鎖的一個變種。但是它在很多情況下避免了加鎖操作,因此開銷很低。一般都實現了非阻塞的讀操作,同時寫操作也只是鎖定必要的行。

MVCC的實現,是通過保存數據在某個時間點的快照來實現的。也就是說,不管需要執行多長時間,每個事務看到的數據都是一致的。根據事務開始的時間不同,每個事務對同一張表,同一時刻看到的數據可能是不一樣的。

MVCC的不同實現,大致可分為樂觀派并發控制,和悲觀派并發控制

InnoDB的MVCC,是通過在每行記錄后面保存兩個隱藏的列來實現的。這兩個列,一個保存了行的創建時間,一個保存行的過期時間(或刪除時間)。但存儲的并不是實際的時間值,而是系統版本號。每開始一個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。

這里可以簡單了解一下在REPEATABLE READ 隔離級別下,MVCC具體是如何查詢的。

InnoDB會根據一下兩個條件檢查每行記錄:

1、InnoDB只查找版本早于當前事務版本的數據行,即行的版本號小于或等于事務的系統版本號。這樣可以確保事務讀取的行,要么是在事務開始前已經存在的,要么是事務自身插入或修改過的。

2、行的刪除版本號要么未定義,要么大于當前事務版本號。這可以確保事務讀取到的行,在事務開始之前未被刪除。

只有符合上述兩個條件的記錄,才能返回作為查詢結果。

保存這兩個額外的系統版本號,使大多數讀操作都可以不用加鎖。這樣設計使得讀數據操作很簡單,性能很好,并且也能保證只會讀取到符合標準的行。

MVCC只在REPEATABLE READ 和 READ COMMITTED兩個隔離級別下工作。其他兩個隔離級別和MVCC不兼容。因為READ UNCOMMITTED總是讀取最新的數據行,而不是符合當前事務版本的數據行;而SERIALIZABLE則會對所有讀取的行都加鎖

總結

以上是生活随笔為你收集整理的MySQL 高级 —— MVCC 多版本并发控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。