報告有關(guān)鎖的信息。
sp_lock [[@spid1 =] 'spid1'] [,[@spid2 =] 'spid2']
[@spid1 =] 'spid1'
是來自 master.dbo.sysprocesses 的 Microsoft® SQL Server™ 進程 ID 號。spid1 的數(shù)據(jù)類型為 int,默認值為 NULL。執(zhí)行 sp_who 可獲取有關(guān)該鎖的進程信息。如果沒有指定 spid1,則顯示所有鎖的信息。
[@spid2 =] 'spid2'
是用于檢查鎖信息的另一個 SQL Server 進程 ID 號。spid2 的數(shù)據(jù)類型為 int,默認設(shè)置為 NULL。spid2 為可以與 spid1 同時擁有鎖的另一個 spid,用戶還可獲取有關(guān)它的信息。
說明 sp_who 可含有 0 個、1 個或 2 個參數(shù)。這些參數(shù)確定存儲過程是顯示全部、1 個還是 2 個 spid 進程的鎖定信息。
0(成功)
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
spid | smallint | SQL Server 進程 ID 號。 |
dbid | smallint | 請求鎖的數(shù)據(jù)庫標識號。 |
ObjId | int | 請求鎖的對象的對象標識號。 |
IndId | smallint | 索引標識號。 |
type | nchar(4) | 鎖的類型: DB:數(shù)據(jù)庫 |
Resource | nchar(16) | 與 syslockinfo.restext 中的值對應(yīng)的鎖資源。 |
Mode | nvarchar(8) | 鎖請求者的鎖模式。該鎖模式代表已授予模式、轉(zhuǎn)換模式或等待模式。 |
Status | int | 鎖的請求狀態(tài) GRANT |
用戶可以通過向 SELECT 語句的 FROM 子句中添加優(yōu)化程序提示或設(shè)置 SET TRANSACTION ISOLATION LEVEL 選項來控制鎖定。有關(guān)語法和限制的信息,請參見 SELECT 和 SET TRANSACTION ISOLATION LEVEL。
通常,讀操作獲取共享鎖,寫操作獲取排它鎖。在更新操作的初始階段讀取數(shù)據(jù)時,會獲取更新鎖。更新鎖與共享鎖兼容。此后,如果更改了數(shù)據(jù),更新鎖會提升為排它鎖。有時在更改數(shù)據(jù)時,會在獲取排它鎖之前暫時獲取更新鎖。此后,該更新鎖會自動提升為排它鎖。
可以鎖定各種級別的數(shù)據(jù),包括整個表、表中的一頁或多頁以及表的一行或多行。粒度級別較高的意向鎖表示正在或試圖以較低的鎖粒度級別獲取鎖。例如,表意向鎖表示獲取共享頁級鎖或排它頁級鎖的意向。意向鎖可以阻止另一個事務(wù)獲取該表的表鎖。
當分配或釋放由 8 個數(shù)據(jù)庫頁組成的組時,將持有擴展盤區(qū)鎖。擴展盤區(qū)鎖在運行 CREATE 或 DROP 語句時或在運行需要新數(shù)據(jù)或索引頁的 INSERT 或 UPDATE 語句時設(shè)置。
在讀取 sp_lock 信息時,使用 OBJECT_NAME( ) 函數(shù)通過表的 ID 號獲取表的名稱,例如:
SELECT object_name(16003088)
所有與 SPID 值不關(guān)聯(lián)的分布式事務(wù)都是孤立事務(wù)。SQL Server 2000 給所有孤立的分布式事務(wù)賦予 SPID 值"-2"
,使得用戶更容易識別阻塞的分布式事務(wù)。有關(guān)更多信息,請參見 KILL。
有關(guān)使用 Windows NT 性能監(jiān)視器查看特定進程 ID 信息的更多信息,請參見 DBCC。
執(zhí)行權(quán)限默認授予 public 角色。
下面的示例顯示 SQL Server 中當前持有的所有鎖的信息。
USE master
EXEC sp_lock
下例顯示進程 ID 53 的信息(其中包括鎖信息)。
USE master
EXEC sp_lock 53
相關(guān)文章