數據庫的併發控制

併發控制闡述


併發操作可能帶來哪些數據不一致性?

  1. 改,改:丟失修改;
  2. 讀,改|刪|增:不可重複讀;
  3. 改(後又撤銷),讀:讀’髒‘數據;

併發操作帶來數據不一致性的原因?

答:併發操作破壞了事務的隔離性。

併發控制的技術有哪些?

答:封鎖、時間戳、樂觀控制法、多版本併發控制等。

封鎖


所謂封鎖就是事務T對某個數據對象操作前對其加鎖,在事務T釋放鎖前,其他任何事務不能更新此數據對象。鎖分爲排他鎖和共享鎖。

  • 排他鎖(X鎖):事務T對數據對象A加上X鎖,則只允許T讀取或修改,其他事務不能對其上鎖直到T釋放對A上的X鎖。
  • 共享鎖(S鎖):事務T對數據對象A加上S鎖,則T可以讀取但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖。

同一數據對象A,XX、XS、SX是不相容的。

什麼是封鎖協議?

答:對運用X鎖和S鎖約定的一些規則。

  1. 一級封鎖協議:事務T在修改數據A前必須先對其加上X鎖,直到事務結束再釋放。(防止丟失修改,不保證可重複讀和讀’髒數據‘)
  2. 二級封鎖協議:在一級基礎上,在事務T讀取A之前必須先對其加上S鎖,讀完後即可釋放S鎖。(防止丟失修改和讀’髒數據‘)
  3. 三級封鎖協議:在一級基礎上,在事務T讀取A之前必須先對其加上S鎖,事務結束纔可釋放S鎖。

什麼是死鎖和活鎖?

答:活鎖是因爲多個事務T對同一個數據A處理,排隊中有一個名次不靠後卻陷入漫長等待的情形。解決方法是採用先來先服務的策略;死鎖是指兩個事務互相等待的情形。

如何應對死鎖?

答:超時法和事務等待圖法來診斷死鎖並解除它。

什麼樣的併發調度是正確的調度?

答:可串行化( Serializable )的調度是正確的調度。可串行化的調度的定義:多個事務的併發執行是正確的,當且僅當其結果與按某一次序串行執行它們時的結果相同,稱這種調度策略爲可串行化的調度。

什麼是兩段鎖協議?

答:用於實現併發調度的可串行性,從而保證調度的正確性。事務遵守兩端協議是可串行化調度的充分條件,所謂兩段的含義是將事務分成兩個階段;

  1. 擴展階段:獲得封鎖;
  2. 收縮階段:釋放封鎖;

什麼是封鎖的粒度?

答:封鎖對象的大小叫封鎖粒度,封鎖對象可以是邏輯單元(屬性值、屬性值的集合、元組、關係、索引項、數據庫),也可以是物理單元(頁、物理記錄)。封鎖粒度越大,併發度越小,開銷也越小。

什麼是多粒度封鎖?

答:一個系統同時支持多種封鎖粒度供不同的事務選擇,一個結點加鎖意味着這個結點的所有後裔結點也被加上同樣類型的鎖。

什麼是顯示封鎖和隱式封鎖?

答:二者運用於多粒度封鎖,顯示封鎖表示應事務的要求直接加到數據對象上的鎖,隱式封鎖表示該數據對象沒有被單獨加鎖,是由於上級結點枷鎖而使該數據對象加了鎖。

什麼是意向鎖?

答:引進意向鎖是爲了提高封鎖子系統的效率,對任一結點加鎖時,必須先對它的上層結點加意向鎖。

  1. IS鎖:如果對一個數據對象加 IS 鎖,表示它的後裔結點擬(意向)加 S 鎖。
  2. IX 鎖:如果對一個數據對象加 ix 鎖,表示它的後裔結點擬(意向)加 X 鎖。
  3. SIX 鎖:如果對一個數據對象加 SIX 鎖,表示對它加 S 鎖,再加 IX 鎖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章