亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql?MVCC多版本并發控制的知識點有哪些

發布時間:2022-04-29 11:04:49 來源:億速云 閱讀:240 作者:iii 欄目:開發技術

這篇文章主要介紹了Mysql MVCC多版本并發控制的知識點有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Mysql MVCC多版本并發控制的知識點有哪些文章都會有所收獲,下面我們一起來看看吧。

1、MVCC

MVCC,全稱Multi-Version Concurrency Control,即多版本并發控制。MVCC是一種并發控制的方法,一般在數據庫管理系統中,實現對數據庫的并發訪問,在編程語言中實現事務內存。

MVCC在MySQL InnoDB中的實現主要是為了提高數據庫并發性能,用更好的方式去處理讀寫沖突,做到即使有>讀寫沖突時,也能做到不加鎖,非阻塞并發讀。

2、當前讀

像select lock in share mode(共享鎖), select for update ; update, insert ,delete(排他鎖)這些操作都是一種當前讀,為什么叫當前讀?就是它讀取的是記錄的最新版本,讀取時還要保證其他并發事務不能修改當前記錄,會對讀取的記錄進行加鎖。

3、快照讀(提高數據庫的并發查詢能力)

像不加鎖的select操作就是快照讀,即不加鎖的非阻塞讀;快照讀的前提是隔離級別不是串行級別,串行級別下的快照讀會退化成當前讀;之所以出現快照讀的情況,是基于提高并發性能的考慮,快照讀的實現是基于多版本并發控制,即MVCC,可以認為MVCC是行鎖的一個變種,但它在很多情況下,避免了加鎖操作,降低了開銷;既然是基于多版本,即快照讀可能讀到的并不一定是數據的最新版本,而有可能是之前的歷史版本

4、當前讀、快照讀、MVCC關系

MVCC多版本并發控制指的是維持一個數據的多個版本,使得讀寫操作沒有沖突,快照讀是MySQL為實現MVCC的一個非阻塞讀功能。MVCC模塊在MySQL中的具體實現是由三個隱式字段,undo日志、read view三個組件來實現的。

5、MVCC實現原理

mvcc的實現原理主要依賴于記錄中的三個隱藏字段,undolog,read view來實現的。

隱藏字段

行記錄除了我們自定義的字段外,還有數據庫隱式定義的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段

DB_TRX_ID

6字節,最近修改事務id,記錄創建這條記錄或者最后一次修改該記錄的事務id

DB_ROLL_PTR

7字節,回滾指針,指向這條記錄的上一個版本,用于配合undolog,指向上一個舊版本

DB_ROW_JD

6字節,隱藏的主鍵,如果數據表沒有主鍵,那么innodb會自動生成一個6字節的row_id

undo log

undolog被稱之為回滾日志,表示在進行insert,delete,update操作的時候產生的方便回滾的日志 當進行insert操作的時候,產生的undolog只在事務回滾的時候需要,并且在事務提交之后可以被立刻丟棄 當進行update和delete操作的時候,產生的undolog不僅僅在事務回滾的時候需要,在快照讀的時候也需要,所以不能隨便刪除,只有在快照讀或事務回滾不涉及該日志時,對應的日志才會被purge線程統一清除(當數據發生更新和刪除操作的時候都只是設置一下老記錄的deleted_bit,并不是真正的將過時的記錄刪除,因為為了節省磁盤空間,innodb有專門的purge線程來清除deleted_bit為true的記錄,如果某個記錄的deleted_id為true,并且DB_TRX_ID相對于purge線程的read view 可見,那么這條記錄一定時可以被清除的)

Read View

Read View是事務進行快照讀操作的時候生產的讀視圖,在該事務執行快照讀的那一刻,會生成一個數據系統當前的快照,記錄并維護系統當前活躍事務的id,事務的id值是遞增的。

6、MVCC核心思想

MVCC 的核心思想是: 我可以查到在我這個事務開始之前已經存在的數據,即使它在后面被修改或者刪除了。在我這個事務之后新增的數據,我是查不到的。

MVCC查找規則:只能查找創建時間小于等于當前事務ID的數據和刪除時間大于當前事務ID的行(或未刪除)

Mysql?MVCC多版本并發控制的知識點有哪些

如圖,在Transaction1事務中插入兩條數據,并提交事務,然后在Transaction2事務中讀取,讀取到兩條數據

Mysql?MVCC多版本并發控制的知識點有哪些

如圖,在Transaction3事務中插入一條為老連的數據,然后在Transaction2事務讀取,根據mvcc規則,不能查到在我的事務開始之后插入插入的數據,老連的創建ID大于2,所以只能查到兩條數據

Mysql?MVCC多版本并發控制的知識點有哪些

如圖,在Transaction4事務中刪除id為2的數據,然后在Transaction2事務讀取,根據mvcc規則,可以查到在我的事務開始之后插刪除的數據,老晁還是可以查出來所以還是查到兩條數據

Mysql?MVCC多版本并發控制的知識點有哪些

如圖,在Transaction5事務中下,添加一條name=濤哥的數據,刪除id=1數據,修改name=濤哥的id為1,然后在Transaction2事務讀取,根據mvcc規則,可以查到在我的事務開始之后插刪除的數據,老嚴還是可以查出來,所以還是查到兩條數據

通過以上演示我們能看到,通過版本號的控制,無論其他事務是插入、修改、刪除,Transaction2事務查詢到的數據都沒有變化。

關于“Mysql MVCC多版本并發控制的知識點有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Mysql MVCC多版本并發控制的知識點有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨玉县| 宿州市| 贵州省| 浦城县| 周宁县| 平度市| 隆化县| 兰州市| 克东县| 凤凰县| 四子王旗| 潼关县| 樟树市| 桑日县| 滨州市| 武威市| 来安县| 琼海市| 香港| 武汉市| 高台县| 翁牛特旗| 龙岩市| 沂源县| 伊川县| 交城县| 昌黎县| 庆安县| 神木县| 进贤县| 桃园市| 九寨沟县| 西峡县| 井研县| 遂川县| 迁西县| 富源县| 延寿县| 乐至县| 外汇| 郎溪县|