2011-10-31 26 views
1

我想知道是否有人可以解釋我有關鎖定和鎖定在SQL Server(2008)升級或指向我一個關於它的好文章。SQL Server行/頁/表鎖定,它們何時發生?

我想更好地理解何時(行/頁/表)鎖定可能發生或在哪個場景的SQL Server將決定升級鎖定。

例如,如果許多行被刪除或僅在使用顯式事務時發生鎖定,沒有指定事務的delete語句會導致表鎖定?

我知道這可能是一個很大的問題,但任何輸入表示讚賞。

Dirk

+2

有豐富的信息可在線獲得:通過在線搜索SQL Server圖書(BOL) –

回答

2

您的問題:SQL Server行/頁/表鎖定,它們何時發生?

迴應:您指的是鎖定升級。鎖定升級(行/頁/表)出現 (1)當單個非分區表或索引 (2)上獲取至少5000個鎖時,如果單個tsql語句在單個分區上獲得至少5000個鎖分區表 (3)當實例中的鎖數超過內存或配置閾值時。 (4)當鎖定衝突阻止升級時,sql服務器會觸發鎖定升級,每需要1,250個新鎖。

如果語句在一個索引中獲取3,000個鎖並在同一個表的另一個索引中獲取3,000個鎖,則不會觸發鎖定升級。同樣,如果語句在表上具有自加入,則不會觸發鎖升級,並且對錶的每個引用僅在表中獲得3,000個鎖。

只有在觸發升級時訪問的表纔會發生鎖升級。

只要鎖的數量大於鎖升級的內存閾值,數據庫引擎就會觸發鎖升級。內存閾值取決於鎖配置選項的設置:

如果鎖選項設置爲其默認設置爲0,則當鎖對象使用的內存爲內存的24%時,將達到鎖升級閾值由數據庫引擎使用,不包括AWE內存。用於表示鎖的數據結構大約爲100個字節。此閾值是動態的,因爲數據庫引擎可動態獲取和釋放內存以適應不同的工作負載。

如果鎖定選項的值不是0,則鎖定升級閾值爲鎖定選項值的40%(或者如果存在內存壓力,則爲更低)。

下面將返回鎖定信息爲您的數據庫實例

SELECT RESOURCE_TYPE,resource_associated_entity_id, REQUEST_STATUS,request_mode,request_session_id, resource_description 從sys.dm_tran_locks WHERE resource_database_id =