成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說MVCC的執行原理?

開發 前端
MVCC 主要應用于 InnoDB 引擎中的 RC 事務隔離級別和 RR 隔離級別,其中 RC 隔離級別每次快照讀都會生成一個新的 Read View,而 RR 隔離級別只在第一次快照讀時生成 Read View,之后會復用 Read View,從而解決了(部分)幻讀問題。

MVCC(Multi-Version Concurrency Control)是一種并發控制機制,用于解決數據庫并發訪問中,數據一致性問題。它通過在讀寫操作期間保存多個數據版本,以提供并發事務間的隔離性,從而避免了傳統的鎖機制所帶來的資源爭用和阻塞問題。

所謂的一致性問題,就是在并發事務執行時,應該看到那些數據和不應該看到那些數據。

在 MVCC 機制中,每個事務的讀操作都能看到事務開始之前的一致性數據快照,而不受其他并發事務的修改的影響。核心思想是通過創建多個數據版本,保持事務的一致性和隔離性

使用 MVCC 機制解決了 RR 隔離級別中,部分幻讀問題,但又沒把全部幻讀問題都解決。

  • MVCC 解決了 RR 隔離級別中,快照讀的幻讀問題。多次查詢快照讀時,因為 RR 級別是復用 Read View(讀視圖),所以沒有幻讀問題。
  • 但 MVCC 解決不了 RR 隔離級別中,如果遇到快照讀和當前讀(讀取當前最新的數據)中間發生過添加操作,那么 Read View 不能復用,就出現了幻讀的問題。

快照讀和當前讀

快照讀:是指在一個事務中,讀取的數據版本是在事務開始時已經存在的數據版本,而不是最新的數據版本。這種讀取方式提供了事務在執行期間看到的數據視圖的一致性,select 查詢就是快照讀當前讀:是指在事務中讀取最新的數據版本,以下幾種操作都是快照讀:

  • select ... for update;
  • select ... lock in share mode;
  • insert ...
  • update ...
  • delete ...

MVCC 實現原理

MVCC 主要是依靠以下兩部分實現的:

  1. Undo Log 鏈
  2. Read View(讀視圖或者叫一致性視圖)

Undo Log 鏈

我們知道 Undo Log 主要是用于數據庫中事務回滾的,但在 MVCC 機制中也發揮著重要的作用,那什么是 Undo Log 鏈呢?

Undo Log 鏈是指在每個數據對象上維護的 Undo Log 記錄鏈表。每張表都會有與之相對應的 Undo Log 鏈,用于記錄修改前的數據信息(以方便數據進行回滾)。

圖片圖片

Read View

Read View(讀視圖)用于管理事務之間數據可見性的一種機制。Read View 在特定時刻為事務創建的一個快照,該快照包含了在該時刻所有未提交事務的事務標識符,以及其他一些輔助信息。

在 Read View 中包含了以下 4 個主要的字段:

  1. m_ids:當前活躍的事務編號集合。
  2. min_trx_id:最小活躍事務編號。
  3. max_trx_id:預分配事務編號,當前最大事務編號+1。
  4. creator_trx_id:ReadView 創建者的事務編號。

RC 級別中,每次快照讀都會生成一個全新的 Read View,而 RR 級別中同一個事務會復用一個 Read View。

有了 Read View 和 Undo Log 鏈之后,并發事務在查詢時就知道要讀取那些數據了。

判斷方法

判斷方法是根據 Read View 中的 4 個重要字段,先去 Undo Log 中最新的數據行進行比對,如果滿足下面 Read View 的判斷條件,則返回當前行的數據,如果不滿足則繼續查找 Undo Log 的下一行數據,直到找到滿足的條件的數據為止,如果查詢完沒有滿足條件的數據,則返回 NULL。

判斷規則

  1. trx_id==creator_trx_id:先將 Undo Log 最新數據行中的 trx_id 和 ReadView 中的 creator_trx_id 進行對比,如果他們兩個值相同,則說明是在同一個事務中執行,那么直接返回當前 Undo Log 的數據行即可,如果不相等,則繼續下面流程。
  2. trx_id<min_trx_id:如果 trx_id 小于 min_trx_id,則說明在執行查詢時,其他事務已經提交此行數據了,那么直接返回此行數據即可,如果大于等于,則繼續下面流程。
  3. trx_id>max_trx_id:如果 trx_id 如果大于等于 max_trx_id,則說明該行數據比當前操作執行的晚,當前行數據不可見,繼續執行后續流程。
  4. min_trx_id<=trx_id<max_trx_id:trx_id 在 min_trx_id 和 max_trx_id 之間還分為以下兩種情況:
  1. trx_id 在 m_ids 中:說明事務尚未執行完,該行數據不可被訪問。
  2. trx_id 未在 m_ids 中:說明事務已經執行完,可以返回該行數據。

以上判斷規則從 Undo Log 最新的行數據,逐行對比,直到找到匹配的數據,否則查詢完未匹配上,則返回 NULL。

小結

MVCC 的實現主要依賴讀視圖 Read View 和 Undo Log 鏈,通過 Read View 中的 4 個字段,判斷要讀取 Undo Log 中數據,從而解決了數據庫并發訪問中,數據一致性的問題。

MVCC 主要應用于 InnoDB 引擎中的 RC 事務隔離級別和 RR 隔離級別,其中 RC 隔離級別每次快照讀都會生成一個新的 Read View,而 RR 隔離級別只在第一次快照讀時生成 Read View,之后會復用 Read View,從而解決了(部分)幻讀問題。

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2024-11-19 15:13:02

2025-04-16 00:00:01

JWT客戶端存儲加密令

2024-03-05 10:33:39

AOPSpring編程

2024-08-22 10:39:50

@Async注解代理

2024-07-31 08:28:37

DMAIOMMap

2024-12-06 07:00:00

2024-03-14 14:56:22

反射Java數據庫連接

2024-02-29 16:49:20

volatileJava并發編程

2024-03-11 18:18:58

項目Spring線程池

2024-03-22 06:56:24

零拷貝技術數據傳輸數據拷貝

2024-09-20 08:36:43

零拷貝數據傳輸DMA

2024-08-29 16:30:27

2024-08-12 17:36:54

2021-06-29 09:47:34

ReactSetState機制

2024-06-04 09:02:03

2025-02-28 00:00:00

2021-06-07 17:12:22

線程安全Atomic

2024-03-28 10:37:44

IoC依賴注入依賴查找

2024-09-12 08:35:06

2024-03-01 11:33:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码高清区二区三区在线 | 欧美一级毛片在线播放 | 亚洲国产精品成人无久久精品 | 国产一区二区不卡 | 国产精品v | 国产黄色av网站 | 日韩在线精品 | 国产激情一区二区三区 | 亚州精品天堂中文字幕 | 久久综合狠狠综合久久综合88 | 亚洲精品一区二区三区中文字幕 | 一级片免费观看 | 狠狠草视频 | 国产激情免费视频 | 久久成人激情 | 特级丰满少妇一级aaaa爱毛片 | 中文字幕一区在线 | 日韩精品免费视频 | 99精品免费视频 | 亚洲人在线 | 久久精品免费一区二区 | h片在线免费看 | www.久久99| 特黄毛片| 国产精品日韩 | 天天精品综合 | 麻豆精品国产91久久久久久 | 中文字幕国产视频 | 亚洲成av| 99精品99久久久久久宅男 | 欧美黑人一级爽快片淫片高清 | 国产在线精品一区二区三区 | 成人在线视频免费播放 | 在线观看视频中文字幕 | 国产精品视频一区二区三区不卡 | 亚洲精品一区二三区不卡 | 久在线视频播放免费视频 | 欧美成人猛片aaaaaaa | 午夜免费福利影院 | jdav视频在线观看免费 | 国产一区二区三区久久久久久久久 |