2009年3月17日 星期二

簡介 Lock 的特性

當我們了解 Transaction 的特性後,就會知道一件很重要的事情,也就是當 Transaction 還沒有結束時 ( Rollback 或 Commit ),如果去讀取 Transaction 執行中異動的資料是很危險的,因為你不知道讀到的資料是否正確 ( Rollback 發生時資料會還原 )。所以資料庫廠商以 Lock 的技術來克服這個問題。

不同資料庫廠商對 Lock 的處理各有其獨特的方式,其目的是為了保護資料的正確性,常見的 Lock 方式有:

  1. Shared Lock:表示資料已經被 Transaction 讀取,該資料允許其他 Transaction 做讀取動作,但是不允許更改資料。
  2. Exclusive Lock:表示資料已經被 Transaction 更改,該資料不允許其他 Transaction 做讀取或更改動作。

另外 Lock 的範圍也因資料庫的不同而有不同的範圍,也就是說當 Lock 發生時會影響到的相關資料的範圍,可能的方式有下列幾種:

  1. Database Level Lock:當發生 Lock 時整個 Database 都會受影響,換句話說當有人要寫入資料時,所有的使用者都不可以使用了。這種架構現在應該不容易見到了。
  2. Table Level Lock:以 Table 為 Lock 的單位。
  3. Page Level Lock:以資料庫內部資料存放的單位為 Lock 的單位。
  4. Row Level Lock:以單筆資料為 Lock 的單位。
  5. Column Level Lock:以欄位資料為 Lock 的單位,以目前電腦的執行效能,不太容易變成一個可用的商業產品。

    上述不同的 Lock Level 主要會影響的是:同一時間的資料庫使用人數,及系統資源消耗的狀況,所以實務上資料庫廠商通常會提供的是 Table、Page、Row 等 Level Lock 的功能。

哪一種 Lock Level 會比較好是不一定的,完全取決與應用系統實際上的需求。

本則專題由飛達客工作室提供