資料庫的MVCC是什麼

2021-10-13 07:21:04 字數 1637 閱讀 8384

目錄

mvcc

mvcc是什麼?

mvcc解決了什麼問題?

mvcc 是如何實現的?

事務版本號

行記錄的隱藏列

undo log

read view 

全稱是 multiversion concurrency control,中文是多版本併發控制技術。通過資料行的多個版本管理來實現資料庫的併發控制,簡單來說它的思想就是儲存資料的歷史版本。讀取資料的時候不需要加鎖也可以保證事務的隔離效果(樂觀鎖思想)

1,讀寫之間阻塞的問題,通過 mvcc 可以讓讀寫互相不阻塞,即讀不阻塞寫,寫不阻塞讀,這樣就可以提公升事務併發處理能力。

2,降低了死鎖的概率。樂觀鎖,讀取資料時並不需要加鎖,對於寫操作,也只鎖定必要的行。

3,解決一致性讀(快照讀、不加鎖讀),當我們查詢資料庫在某個時間點的快照時,只能看到這個時間點之前事務提交更新的結果,而不能看到這個時間點之後事務提交的更新結果。

mvcc 沒有正式的標準,所以在不同的 dbms 中,mvcc 的實現方式可能是不同的

mvcc是多版本併發控制技術,那麼innodb 是如何儲存記錄的多個版本的呢?

每乙個事務,都分配乙個自增長的 id,確定了事務的時間順序

葉子節點段的資料頁中儲存了行記錄,行記錄中有一些隱藏字段

db_row_id:隱藏的行 id,用來生成預設聚集索引。如果建立資料表的時候沒有指定聚集索引,這時 innodb 就會用這個隱藏 id 來建立聚集索引。採用聚集索引的方式可以提公升資料的查詢效率。

db_trx_id:操作這個資料的事務 id,也就是最後乙個對該資料進行插入或更新的事務 id。

db_roll_ptr:回滾指標,也就是指向這個記錄的 undo log 資訊。

innodb 將行記錄快照儲存在了 undo log 裡,在回滾段位置:

回滾指標將資料行的所有快照記錄都通過鍊錶的結構串聯了起來,每個快照的記錄都儲存了當時操作這個資料的事務 id。如果想要找歷史快照,就可以通過遍歷回滾指標的方式進行查詢。

多個事務對同乙個行記錄進行更新會產生多個歷史快照,歷史快照儲存在 undo log 裡。如果乙個事務想要查詢這個行記錄,需要讀取哪個版本的行記錄呢?

read view是一條當前未提交的事務列表, 儲存了不應該讓某事務看到的其他的事務 id 列表;也就是說,當乙個事務讀取某條行記錄時,read view決定了此行記錄(可能正被其他事務使用或建立時間晚於所有活躍事務)能否被讀取到。

當查詢一條記錄的時候,系統如何通過多版本併發控制技術找到它:

首先獲取事務自己的版本號,也就是事務 id;

獲取 read view;

查詢得到的資料,然後與 read view 中的事務版本號進行比較;

如果不符合 readview 規則,就需要從 undo log 中獲取歷史快照;

最後返回符合規則的資料。

mvcc 是通過 undo log + read view 進行資料讀取,undo log 儲存了歷史快照,而 read view 規則判斷當前版本的資料是否可見

資料庫是什麼

資料庫中有什麼?值得注意的是,很多人都不需要建立自己的資料庫。您可能也不會建立自己的表或其他資料結構。您可能只需要執行備份和重新儲存並作業系統上的安全性,並讓應用程式安裝為您建立資料庫。這完全可以理解,完全符合許多企業和許多意外datebase的需求。然而,理解這些東西是什麼,以及它如何作為理解sq...

資料庫是什麼?資料庫的概念

本節介紹資料庫的基本概念,包括資料庫儲存方式 資料庫技術的發展歷史 資料庫的儲存結構以及資料庫在開發中的作用。計算機資料 data 的儲存一般以硬碟為資料儲存空間資源,從而保證計算機內的資料能夠持續儲存。對於資料的處理,一般會採用資料庫相關的技術進行處理,從而保證資料處理的高效性。採用資料庫的管理模...

資料庫是什麼啊

按字面上的意思說,就是存放資料的倉庫嘛,若是簡單理解也的確如此,當然,要是簡單理解就行,也叫不會問什麼是資料庫了。資料庫不只是存放資料,還有對資料進行管理,所以又把資料庫稱為資料管理系統。最最恰當的比喻就是檔案櫃,資料庫就是電子化的檔案櫃,我們對檔案櫃中檔案的寫入,刪除修改,檢視,對應資料庫就是增刪...