SQL Server Lock 架構讀後心得

記得以前在處理專案時,常遇到一個交易封鎖了一堆交易的問題,非常困擾。遇到這種情形,通常 都是踢掉幾個封鎖他人的交易作為解決辦法。但是不是原本的DBA設計就是有問題的呢?為了讓日後的資料架構的設計能夠減少LOCK的狀況,小弟就很努力的 先去了解一下SQL Server的Lock機置。

當我們要開始介紹Lock之前,首先來瞭解一下資源(Reource)的層級。如下表,SQL Server將資源分為11級並且可以進行鎖定,由上而下,越往下代表層次越低。

image

資 料庫引擎進行鎖定時,通常是以同時產生多種層級以上的鎖定來完整的保護資源,這一組的多層級的鎖定,我們稱之為「鎖定層級(lock hierarchy)」。我們在此舉個例子。系統為了要完整保護索引的讀取,資料庫引擎必需同時產生一個Shared Lock(S)在一筆資料列上,以及分別產生一個Intend Lock(IS)在資料頁(PAGE)及資料表(TABLE)上。這個例子可以看出,一個交易針對一個資料表並不是只產生一個鎖定而已,而是產生多種鎖定 來保護他自己所能讀取的資源。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

What is 4 + 4 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)