併發一致性問題

2021-04-16 14:01:59 字數 1860 閱讀 1336

常見併發併發一致性問題包括:丟失的修改、不可重複讀、讀髒資料、幻影讀(幻影讀在一些資料中往往與不可重複讀歸為一類)。

2.2.1.1 丟失修改

下面我們先來看乙個例子,說明併發操作帶來的資料的不一致性問題。

考慮飛機訂票系統中的乙個活動序列:

甲售票點(甲事務)讀出某航班的機票餘額a,設a=16.

乙售票點(乙事務)讀出同一航班的機票餘額a,也為16.

甲售票點賣出一張機票,修改餘額a←a-1.所以a為15,把a寫回資料庫.

乙售票點也賣出一張機票,修改餘額a←a-1.所以a為15,把a寫回資料庫.

結果明明賣出兩張機票,資料庫中機票餘額只減少1。

歸納起來就是:兩個事務t1和t2讀入同一資料並修改,t2提交的結果破壞了t1提交的結果,導致t1的修改被丟失。前文(2.1.4資料刪除與更新)中提到的問題及解決辦法往往是針對此類併發問題的。但仍然有幾類問題通過上面的方法解決不了,那就是:

2.2.1.2 不可重複讀

不可重複讀是指事務t1讀取資料後,事務t2執行更新操作,使t1無法再現前一次讀取結果。具體地講,不可重複讀包括三種情況:

2.2.1.3 讀"髒"資料

讀"髒"資料是指事務t1修改某一資料,並將其寫回磁碟,事務t2讀取同一資料後,t1由於某種原因被撤消,這時t1已修改過的資料恢復原值,t2讀到的資料就與資料庫中的資料不一致,則t2讀到的資料就為"髒"資料,即不正確的資料。

產生上述三類資料不一致性的主要原因是併發操作破壞了事務的隔離性。併發控制就是要用正確的方式排程併發操作,使乙個使用者事務的執行不受其它事務的干擾,從而避免造成資料的不一致性。

2.2.2.1 封鎖(locking)

封鎖是實現併發控制的乙個非常重要的技術。所謂封鎖就是事務t在對某個資料物件例如表、記錄等操作之前,先向系統發出請求,對其加鎖。加鎖後事務t就對該資料物件有了一定的控制,在事務t釋放它的鎖之前,其它的事務不能更新此資料物件。

基本的封鎖型別有兩種:排它鎖(exclusive locks 簡記為x鎖)和共享鎖(share locks 簡記為s鎖)。

排它鎖又稱為寫鎖。若事務t對資料物件a加上x鎖,則只允許t讀取和修改a,其它任何事務都不能再對a加任何型別的鎖,直到t釋放a上的鎖。這就保證了其它事務在t釋放a上的鎖之前不能再讀取和修改a。

共享鎖又稱為讀鎖。若事務t對資料物件a加上s鎖,則其它事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。這就保證了其它事務可以讀a,但在t釋放a上的s鎖之前不能對a做任何修改。

2.2.2.2 封鎖協議

在運用x鎖和s鎖這兩種基本封鎖,對資料物件加鎖時,還需要約定一些規則,例如應何時申請x鎖或s鎖、持鎖時間、何時釋放等。我們稱這些規則為封鎖協議(locking protocol)。對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議。下面介紹**封鎖協議。**封鎖協議分別在不同程度上解決了丟失的修改、不可重複讀和讀"髒"資料等不一致性問題,為併發操作的正確排程提供一定的保證。下面只給出**封鎖協議的定義,不再做過多**。

1級封鎖協議是:事務t在修改資料r之前必須先對其加x鎖,直到事務結束才釋放。事務結束包括正常結束(commit)和非正常結束(rollback)。1級封鎖協議可防止丟失修改,並保證事務t是可恢復的。在1級封鎖協議中,如果僅僅是讀資料不對其進行修改,是不需要加鎖的,所以它不能保證可重複讀和不讀"髒"資料。

2級封鎖協議是:1級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,讀完後即可釋放s鎖。2級封鎖協議除防止了丟失修改,還可進一步防止讀"髒"資料。

3級封鎖協議是:1級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,直到事務結束才釋放。3級封鎖協議除防止了丟失修改和不讀'髒'資料外,還進一步防止了不可重複讀。

Session一致性問題

1 什麼是session session在網路應用上表示 會話控制 用於儲存特定使用者會話所需的屬性及配置資訊 session又表示乙個特定的時間間隔,指從登入進入系統到登出退出系統之間所經過的時間。http是無狀態的協議,在動態web應用中,往往需要知道前面的操作和後面的操作是不是乙個使用者。也就...

1 3 事物和併發一致性問題

1.3.1 事務 事物指的是滿足 acid 特性的一組操作,可以通過 commit 提交乙個事務,也可以使用 rollback 進行回滾。事務處理可以用來維護資料庫的完整性,保證成批的 sql 語句要麼全部執行,要麼全部不執行。一般來說,事務是必須滿足4個條件 acid 原子性 atomicity,...

資料庫 併發一致性問題

在併發環境下,事務間的隔離性很難保證,因此會出現併發一致性問題。併發一致性問題主要有四類,即 丟失修改問題,讀髒資料問題,不可重複讀問題,幻影讀問題。丟失修改問題 t1和t2兩個事務都對同一資料進行修改,t1先修改,t2隨後修改,t2的修改覆蓋了t1的修改。讀髒資料問題 t1修改了乙個資料,t2隨後...