Oracle併發與多版本控制

2022-08-29 04:27:14 字數 1711 閱讀 1262

1.什麼是併發

2.事務隔離級別

2.1 read uncommitted

2.2 read committed

2.3 repetable read

2.4 serializable

2.5 read only

3.多版本讀一致性含義

4.寫一致性

1.多版本控制是指,oracle能同時物化多個版本的資料,這也是oracle提供讀一致性的基礎。

2.事務隔離級別

不同隔離級別可能允許或不允許的3種現象:

髒讀(dirty read)

你能讀取未提交的資料

不可重複讀(nonrepeatable read)

t1和t2時間讀取某一行的結果不一樣。

幻讀(phantom read)

t1執行查詢,t2再執行這個查詢,可能增加了一些行。

不可重複讀和幻影讀區別在於,幻讀中,已經讀取的資料沒有變化,t2比t1有更多的資料滿足你的查詢條件。

隔離級別

髒讀不可重複讀

幻讀 read uncommitted√√

√ read committed×√

√repetable read××

√ serializable read××

×

行賬號賬戶餘額

1123$500

2456$240.25

….342 023

987$100

select sum(acount_balance) from accounts;

在查詢中的某個時刻將$400從123轉入987,未提交

不同隔離級別,非oracle資料庫和oracle資料庫的表現

非oracle

oracle

read uncommitted

先計算一次123賬號的$400,(在讀123到987期間,發生了轉賬),讀到987的時候,又計算一次$400,發生了重複計算。

髒讀了會從回滾段讀987賬號舊版本的$100

read committed

更新987的時候,對這一行加了排他鎖。讀到這一行的時候,必須等待提交或回滾完成,才能繼續讀下去,而等來的結果仍然可能是錯誤的(如果提交,讀到的是$400,那麼會對$400計算兩次)。

資料的寫入者阻塞資料的讀取者

由於使用多版本和讀一致性,答案總是一樣。都從回滾段去讀,並且不會被阻塞。

repetable read

同乙個查詢相對於某個時間點返回的結果是一致的

1.得到一致的答案

2.避免丟失更新

低階的共享鎖來實現,共享讀鎖防止其他會話修改我們已經讀取的資料。

上面的例子效果就是,t1時刻開始查詢,必須等待查詢完成,update才能進行。

資料的讀取者會阻塞資料的寫入者

資料的讀取者和寫入者可能而且經常會發生死鎖

多版本實現提供讀一致的答案

oracle實現讀一致性不會帶來讀寫阻塞,也不會導致死鎖。oracle永遠不會使用共享讀鎖。

serializable

多版本併發控制

多版本併發控制,討論的不是指的乙個軟體同時發行多個版本怎麼進行管理的問題,而是mysql中的mvcc。mvcc,multiple version concurrent control,多版本併發控制。可以認為mvcc是行級鎖的乙個變種,但它在很多情況下避免了加鎖操作,因此開銷更低。雖然實現機制有所不...

Oracle 的併發與多版本

oracle的預設隔離級是快照 snapshot 寫入事務不會阻塞讀取事務,讀取事務可以獲取當前已提交值。db2預設是游標穩定性 cursor stability 寫入事務會阻塞讀取事務。oracle對併發的支援不僅使用高效的鎖定,還實現了一種多版本體系結構,它提供了一種受控但高度併發的資料訪問。這...

Oracle 的併發與多版本

oracle的預設隔離級是快照 snapshot 寫入事務不會阻塞讀取事務,讀取事務可以獲取當前已提交值。db2預設是游標穩定性 cursor stability 寫入事務會阻塞讀取事務。oracle對併發的支援不僅使用高效的鎖定,還實現了一種多版本體系結構,它提供了一種受控但高度併發的資料訪問。這...