文章目錄
- 1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView
- 2、先來看第一次快照讀具體的讀取過程:
- 3、再來看第二次快照讀具體的讀取過程:
1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView
我們就來分析事務5中,兩次快照讀讀取數據,是如何獲取數據的?
在事務5
中,查詢了兩次id為30的記錄,由于隔離級別為Read Committed
,所以每一次進行快照讀
都會生成一個ReadView,那么兩次生成的ReadView如下。
那么這兩次快照讀在獲取數據時,就需要根據所生成的ReadView以及ReadView的版本鏈訪問規則
,到undolog版本鏈
中匹配數據,最終決定此次快照讀返回的數據。
2、先來看第一次快照讀具體的讀取過程:
在進行匹配時,會從undo log的版本鏈
,從上到下進行挨個匹配:
- 先匹配
這條記錄,這條記錄對應的
trx_id為4
,也就是將4帶入右側的匹配規則中。 ①不滿足 ②不滿足 ③不滿足 ④也不滿足 ,都不滿足,則繼續匹配undo log版本鏈的下一條。
- 再匹配第二條
,這條記錄對應的trx_id為3
,也就是將3帶入右側的匹配規則中。①不滿足 ②不滿足 ③不滿足 ④也不滿足 ,都不滿足,則繼續匹配undo log版本鏈的下一條。
- 再匹配第三條
,這條記錄對應的trx_id為2
,也就是將2帶入右側的匹配規則中。①不滿足②滿足
終止匹配,此次快照讀,返回的數據就是版本鏈中記錄的這條數據。
3、再來看第二次快照讀具體的讀取過程:
在進行匹配時,會從undo log的版本鏈
,從上到下進行挨個匹配:
- 先匹配
這條記錄,這條記錄對應的trx_id為4
,也就是將4帶入右側的匹配規則中。 ①不滿足 ②不滿足 ③不滿足 ④也不滿足 ,都不滿足,則繼續匹配undo log版本鏈的下一條。
- 再匹配第二條
,這條
記錄對應的trx_id為3
,也就是將3帶入右側的匹配規則中。①不滿足②滿足
。終止匹配,此次快照讀,返回的數據就是版本鏈中記錄的這條數據。