事物隔離層簡介

2021-08-30 01:10:40 字數 2221 閱讀 1444

隔離性是交易的保證之一,表示交易與交易之間不互相干擾,好像同時間就只有自己的交易存在一樣,隔離性保證的基本方式是在資料庫層面,對資料庫或相關字段鎖定,在同一時間內只允許乙個交易進行更新或讀取。

先來看看沒有對資料庫進行鎖定下,可能發生的問題:

基本上就是指某個交易對欄位進行更新的資訊,因另乙個交易的介入而遺失。

例如,兩個以上交易在進行同一欄位的更新時,若沒有對欄位進行鎖定,若交易a進行commit,交易b因故rollback,則交易a所作的更新就會發生遺失的問題:

交易a更新欄位1

交易b更新欄位1

交易a commit

交易b rollback

另一種可能的情況是,如果交易a在交易b前後進行更新與commit,則交易b所作的更新將會遺失,又稱為二次更新遺失(second lost update),例如:

交易a更新欄位1

交易b更新欄位1

交易b commit

交易a commit

在以上的情況,交易b所進行的更新將會遺失。

兩個交易同時進行,其中乙個交易更新資料,另乙個交易讀取了尚未commit的資料,就有可能發生髒讀問題。例如:

交易a更新欄位1

交易b讀取欄位1

交易a rollback

交易b commit

在以上的情況下,交易b讀取的是不正確的資料。

某個交易兩次讀取同一欄位的資料並不一致,例如,如果交易a在交易b前後進行資料的讀取,則會得到不同的結果。

交易a讀取欄位1

交易b更新欄位1

交易b commit

交易a讀取欄位1

在以上的情況,交易a讀取兩次欄位1,但卻得到不同的結果。

如果交易a進行兩次查詢,在兩次查詢之中有個交易b插入一筆新資料或刪除一筆新資料,第二次查詢時得到的資料多了第一次查詢時所沒有的筆數,或者少了一筆。

交易a進行查詢得到五筆資料

交易b插入一筆資料

交易b commit

交易a進行查詢得到六筆資料

隔離交易的基本方式是鎖定資料庫,但完全的鎖定資料庫實務上並不會這麼作,因為完全的鎖定資料庫將導致嚴重的效能問題,因此實務上會根據資料讀寫更新的頻繁性,設定不同的交易隔離層級(transaction isolation level):

簡而言之,某個交易可以讀取另乙個交易已更新但尚未commit的資料,所以允許dirty read,但不允許lost update,也就是允許交易b讀取交易a更新尚未commit的資料,但在交易a進行commit前,不允許其它交易再寫入(也就是寫入鎖定)。

這個隔離層級讀取錯誤資料的機率太高,一般不會採用這種隔離層級。

讀取的交易不會阻止其它的交易,乙個未commit的交易會阻止其它寫入的交易。

比read uncommited嚴格一些,簡而言之,某個交易僅可讀取另乙個交易已commit的資料,所以允許unrepeatable read,但不允許dirty read,一筆交易正在讀取資料時,允許另一筆交易進行資料寫入,但不允許已經dirty的資料被讀取或寫入(shared read lock, exclusive write lock)。

讀取的交易不會阻止其它的交易,乙個未commit的交易會阻止其它所有的交易。

比read commited嚴格,在乙個交易己讀取的資料,不允許其它交易進行資料寫入,不允許unrepeated read,但phantom read還是可能發生。

讀取的交易不會阻止其它讀取的交易,但會阻止其它寫入的交易,而寫入的交易會阻止所有其它的交易。

最嚴格的隔離層級,同一筆資料一次只能有乙個交易,無法讓交易並行處理。

read uncommited出錯的機率太大,大部份的應用程式會選用read commited或repeatable read的隔離層級,而serializable執行完全的鎖定,嚴重傷害系統效能。

真正的鎖定系統是在資料庫系統上實作的,依各家廠商而有所不同,必須參考廠商的說明書,了解不同的隔離層級對應用程式的效能與擴充套件性有何影響。

以下整理隔離層級對多個交易並行處理的影響,yes表示會發生問題:

隔離層級

dirty read

unrepeatable read

phantom read

read uncommitted

yesyes

yesread committed

noyes

yesrepreatable read

nono

yesserializable

nono

no

簡介事物與隔離級別

事務的特性 原子性 atomicity 事務中的所有操作要麼全部執行,要麼都不執行。www.2cto.com 一致性 consistency 事務執行前後資料庫都處於一致的狀態。隔離性 isolation 多個事務執行都感覺不到其它事務在執行。永續性 durability 乙個事務一旦被提交,所有的...

設定隔離層清除浮動

浮動的影響 title style type text css div1,div2,div3,div4 div1 div2 div3 div4 box box1 style head body div class box div class div1 div div class div2 div d...

事物及事物隔離級別

什麼是事物 事物是訪問資料庫的乙個操作序列,資料庫應用系統通過事物集來完成對資料庫的訪問。事物的正確執行使得資料庫從一種狀態轉換為另一種狀態。事物必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 du...