資料庫基礎
關於交易的並行控制所使用的兩階段鎖定(2PL),下列敘述何者正確?
- A每筆交易可以任意重複加鎖與解鎖的階段。藉此保證不會發生死結
- B讀取時不加鎖,只在寫入時加鎖。藉此能防止包括髒讀在內的所有問題
- C每筆交易只要解除了任何一個鎖,之後就不再加新的鎖。藉此保證即使同時執行,結果也與依序執行時相同,但仍可能發生死結
查看答案與解析
正確答案:C. 每筆交易只要解除了任何一個鎖,之後就不再加新的鎖。藉此保證即使同時執行,結果也與依序執行時相同,但仍可能發生死結
在兩階段鎖定(2PL)中,每筆交易有依序取得所需鎖的階段(成長階段)與解除鎖的階段(縮減階段)兩個階段,一旦開始解除鎖,就不再加新的鎖。只要所有交易都遵守這項規則,就能保證同時執行的結果與依某種順序逐一執行交易時相同(可序列化)。不過,它無法防止兩筆交易互相等待對方解鎖的死結,因此DBMS會偵測死結,並以回復其中一筆交易等方式處理。實務上常用直到提交為止都不解除排他鎖的嚴格兩階段鎖定,它也能防止其他交易讀取尚未提交的資料。
- A. 重複加鎖與解鎖並不是兩階段鎖定。此外,兩階段鎖定也可能發生死結。
- B. 讀取時不加鎖,就可能讀到其他交易正在更新途中的資料,無法防止髒讀等問題。
- C. 正確。開始解鎖後不再加新鎖,可保證可序列化,但仍可能發生死結。