阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 國家安全情報特種考試_三等_資訊組(選試英文):資料庫應用#114834
科目:公職◆資料庫應用
年份:112年
排序:0

申論題內容

一、請先說明資料庫管理系統為什麼需要做「並行控制」(Concurrency Control),並請定義並行控制所使用的「兩階段鎖定協定」(Two-Phase Locking Protocol)。(20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw

為什麼需要並行控制?

在資料庫管理系統(DBMS)中,並行控制是確保多個交易(transactions)能夠安全地並行執行的機制。其主要目的是避免並發執行帶來的問題,並保證資料庫的一致性和完整性。並行控制的重要性主要體現在以下幾個方面:

  1. 資料一致性(Data Consistency)

    • 保證資料庫在多個交易並行執行後仍然處於一致的狀態。避免因為多個交易同時讀寫相同資料而導致的不一致情況。
  2. 隔離性(Isolation)

    • 每個交易在執行過程中不受其他交易的影響,模擬一個獨佔使用資料庫的環境。這樣可以避免「髒讀」(dirty read)、「不可重複讀」(non-repeatable read)和「幻影讀」(phantom read)等問題。
  3. 避免死鎖(Deadlock)和資源競爭

    • 有效的並行控制機制可以減少或避免死鎖情況的發生,並優化資源使用,提升系統性能。
  4. 提高性能(Performance)

    • 合理的並行控制允許多個交易並行執行,從而提高系統的吞吐量和資源利用率。

兩階段鎖定協定(Two-Phase Locking Protocol)

兩階段鎖定協定(Two-Phase Locking Protocol, 2PL)是一種常見的並行控制機制,用於保證交易的隔離性和資料庫的一致性。該協定將鎖定操作分為兩個階段:擴展階段(Growing Phase)和收縮階段(Shrinking Phase)。

定義:

  1. 擴展階段(Growing Phase)

    • 在擴展階段,交易可以申請鎖(lock)並獲取所需的所有鎖,但不能釋放任何鎖。
    • 當交易需要讀取或寫入某個資料項時,會申請相應的共享鎖(shared lock)或排他鎖(exclusive lock)。
  2. 收縮階段(Shrinking Phase)

    • 一旦交易釋放了第一個鎖,就進入了收縮階段。在收縮階段,交易只能釋放鎖,不能再申請任何新的鎖。

操作步驟:

  1. 交易開始

    • 交易開始執行,進入擴展階段,申請所需的鎖。
  2. 鎖的申請和獲取

    • 交易在執行過程中,不斷申請和獲取所需的共享鎖或排他鎖。
  3. 進入收縮階段

    • 當交易釋放了第一個鎖,進入收縮階段,此時不能再申請新的鎖。
  4. 釋放所有鎖

    • 交易完成所有操作後,釋放所有持有的鎖,結束交易。

優點:

  • 避免資料不一致:2PL保證了所有的讀寫操作在交易內是互斥的,避免了資料不一致的問題。
  • 確保隔離性:通過鎖定機制,2PL能有效確保交易的隔離性。

缺點:

  • 可能導致死鎖:如果多個交易互相等待對方釋放鎖,可能會導致死鎖。
  • 性能影響:過多的鎖操作和等待可能會影響系統的性能。

範例

假設有兩個交易 T1T1T1T2T2T2,它們分別需要讀寫資料庫中的資源 A 和 B。

  • 交易 T1T1T1 先申請 A 的排他鎖,然後申請 B 的排他鎖。
  • 交易 T2T2T2 先申請 B 的排他鎖,然後申請 A 的排他鎖。

如果 T1T1T1 已經獲得了 A 的鎖,且 T2T2T2 已經獲得了 B 的鎖,這時就會出現死鎖現象,因為 T1T1T1T2T2T2 都在等待對方釋放鎖,無法繼續執行。

在實現中,可以使用死鎖檢測機制來解決這個問題,例如定期檢查鎖等待圖(wait-for graph)來檢測和處理死鎖。

並行控制在資料庫管理系統中至關重要,用於保證多個交易並行執行時的資料一致性和隔離性。兩階段鎖定協定(2PL)是實現並行控制的一種常見方法,通過擴展階段和收縮階段的鎖操作來保證交易的正確性和一致性。雖然2PL可能會導致死鎖和性能問題,但它在確保資料庫完整性和交易隔離性方面具有重要作用。