Concurrency Control
具備multiprocessing的DBMS,可以同時處理多使用者的Transactions。然而同時處理Transactions不是易事,若不加以控管,可能會違反Transaction的Isolation特性。因此協調同時處理Transactions並維持Transactons的 serializability(交錯執行Transactions的結果與依序執行的結果一致)叫作 Concurrency Control。
Concurrency Control主要面臨及處理的問題有以下幾點:
1. Lost Update
Transaction A 在 update 某筆資料後馬上被 Transaction B update,彷彿Transactoin A 一開始就不存在。這也是 Multithreaded Programming 中常需處理的Race condition。
2. Uncommitted Data
情況是 Transaction A 用到 Transaction B 更動後的資料,然而Transaction B 不僅沒有commit反而rollback。
3. Inconsistent Retrievals
Transaction A 先後使用到某筆資料,然而在中途,此資料被 Transaction B 更動,使得前後兩次讀取的內容不同。
Scheduler
面對這些問題,DBMS提供了Scheduler來處理 Concurrency Control, Scheduler主要的目的是提供serializable schedule,建立一個多Transactions的操作順序,來維持Transactions的serializability,也保護了Isolation的特性。