目錄
一、MVCC多版本并發控制機制
二、事務的隔離級別
一、MVCC多版本并發控制機制
1、定義:
MVCC(Multi-Version Concurrency Control,多版本并發控制)一種并發控制機制,在數據庫中用來控制并發執行的事務,控制事務隔離進行。
2、MVCC的好處包括:
1、并發性能提升:MVCC允許多個事務同時讀取數據庫中的數據,同時進行讀寫操作,避免了鎖定整個數據對象的情況,提高了并發性能。
2、無鎖沖突:由于每個事務可以看到一致性的數據視圖,事務之間互不干擾,避免了傳統鎖機制下可能出現的死鎖等沖突問題。
3、數據一致性:每個事務只能看到在其開始之前已經提交的數據,保證了數據一致性。
然而,MVCC也有一些限制和注意事項:
1、存儲空間占用:由于每個數據行可能存在多個版本,MVCC可能會占用更多的存儲空間。
2、隨機寫性能:對于頻繁進行大量更新操作的場景,由于需要創建新版本,MVCC可能會影響隨機寫性能。
3、銷毀時間戳回收:事務的銷毀時間戳需要及時回收,以避免無用的數據版本堆積,影響性能。
綜上所述:MVCC是一種高效的并發控制機制,通過版本管理和時間戳來實現并發事務的隔離
二、事務的隔離級別
事務的隔離級別是指多個并發事務之間的相互關系和可見性的級別。數據庫系統通過隔離級別來控制并發事務間的影響,保證事務的正確執行和數據的一致性(多個客戶端操作時 ,各個客戶端的事務之間應該是隔離的,相互獨立的 , 不受影響的。如果多個事務操作同一批數據時,則需要設置不同的隔離級別 , 否則就會產生問題 )
1、Read Uncommitted(讀取未提交數據):是最低的隔離級別,事務可以讀取其他事務未提交的數據。這種級別有最高的并發性,但是可能導致臟讀(Dirty Read),即讀取到其他事務更新但未提交的數據。(一個事務讀到了另一個事務還沒有提交的數據)
2、Read Committed(讀取已提交數據):保證了事務只能讀取到已經被提交的數據,避免了臟讀。在這個級別下,事務只能看到并發事務提交的數據,但由于其他事務可能在事務執行期間提交新的數據,可能導致不可重復讀(Non-Repeatable Read),即多次讀取同一數據得到的結果不一致。(一個事務要等另一個事務提交后才能讀取數據)
3、Repeatable Read(可重復讀):保證了事務在執行期間多次讀取同一數據時結果保持一致。在這個級別下,事務在讀取數據時會獲取共享鎖,防止其他事務修改數據,但不阻止其他事務新增數據。這種級別可以避免臟讀和不可重復讀,但仍然可能出現幻讀(Phantom Read),即同一查詢多次執行結果不一致。(同一事務下,事務在執行期間,多次讀取同一數據時,能夠保證讀取到的數據是一致的)
4、Serializable(串行化):是最高的隔離級別,通過確保事務之間的串行執行來避免并發問題。在這個級別下,所有事務按順序一個一個地執行,避免了臟讀、不可重復讀和幻讀,但犧牲了并發性能。
隔離級別按照可見性排列如下:
讀未提交<讀已提交<可重復讀<串行化
讀未提交是最低級別,提供了最小的隔離和最高的并發性能。而Serializable是最高級別,提供嚴格的隔離,但并發性能差。