sp_lock (Transact-SQL)
適用於:SQL Server
報告鎖定的相關信息。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 若要取得 SQL Server 資料庫引擎 中鎖定的相關信息,請使用動態管理檢視sys.dm_tran_locks。
語法
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
引數
[ @spid1 = ] 'session ID1'
這是使用者想要鎖定資訊的sys.dm_exec_sessions 資料庫引擎 會話標識碼。 會話標識碼1 是 int ,預設值為NULL。 執行 sp_who 以取得會話的相關進程資訊。 如果未 指定會話 ID1 ,則會顯示所有鎖定的相關信息。
[ @spid2 = ] 'session ID2'
這是另一個 資料庫引擎 會話標識碼號碼,來自sys.dm_exec_sessions的會話標識碼,其可能同時鎖定會話標識元1,以及使用者也想要的資訊。 會話標識元2 為 int ,預設值為NULL。
傳回碼值
0 (成功)
結果集
sp_lock結果集針對@spid1和@spid2參數中指定的會話所持有的每個鎖定,各包含一個數據列。 如果未指定@spid1或@spid2,結果集會報告 資料庫引擎 實例中目前使用中之所有會話的鎖定。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
spid | smallint | 要求鎖定之進程的 資料庫引擎會話標識碼。 |
dbid | smallint | 保留鎖定之資料庫的標識碼。 您可以使用 DB_NAME() 函式來識別資料庫。 |
ObjId | int | 鎖定所在的物件識別碼。 您可以使用相關資料庫中的 OBJECT_NAME() 函式來識別物件。 值 99 是一個特殊案例,表示其中一個系統頁面的鎖定,用來記錄資料庫中的頁面配置。 |
IndId | smallint | 鎖定所在的索引標識碼。 |
類型 | nchar(4) | 鎖定類型: RID = 鎖定資料列識別碼 (RID) 所識別資料表中的單一數據列。 KEY = 鎖定索引內可保護可串行化交易中索引鍵的範圍。 PAG = 鎖定數據或索引頁面上。 EXT = 鎖定範圍。 TAB = 鎖定整個數據表,包括所有數據和索引。 DB = 鎖定資料庫。 FIL = 鎖定資料庫檔案。 APP = 鎖定應用程式指定的資源。 MD = 鎖定元資料或目錄資訊。 HBT = 鎖定堆積或 B 型樹狀結構 (HoBT)。 這項資訊在 SQL Server 中不完整。 AU = 鎖定配置單位。 這項資訊在 SQL Server 中不完整。 |
資源 | nchar(32) | 識別已鎖定之資源的值。 值的格式取決於 Type 資料行中所識別的資源類型: 類型 值: 資源 值 RID:fileid:pagenumber:rid 格式的標識符,其中 fileid 會識別包含頁面的檔案、pagenumber 識別包含數據列的頁面,以及 rid 會識別頁面上的特定數據列。 fileid 符合sys.database_files目錄檢視中的file_id數據行。 KEY:資料庫引擎 內部使用的十六進位數位。 PAG:fileid:pagenumber 格式的數位,其中 fileid 會識別包含頁面的檔案,而 pagenumber 會識別頁面。 EXT:識別範圍中第一頁的數位。 此數位的格式為 fileid:pagenumber。 TAB:沒有提供任何資訊,因為已在 ObjId 數據行中識別數據表。 DB:未提供任何資訊,因為資料庫已在 dbid 數據行中識別出來。 FIL:檔案的標識碼,符合sys.database_files目錄檢視中的file_id數據行。 APP:鎖定之應用程式資源的唯一標識符。 以 DbPrincipalId:<前兩到 16 個字元的資源字串><哈希值>格式。 MD:依資源類型而有所不同。 如需詳細資訊,請參閱 sys.dm_tran_locks (Transact-SQL) 中resource_description數據行的描述。 HBT:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。 AU:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。 |
模式 | nvarchar(8) | 要求的鎖定模式。 可為以下項目: NULL = 沒有授與資源的存取權。 做為佔位元。 Sch-S = 架構穩定性。 確保當任何工作階段在結構描述元素上保留結構描述穩定性鎖定時,該結構描述元素 (例如資料表或索引) 不會卸除。 Sch-M = 架構修改。 必須由任何想要變更指定資源之結構描述的工作階段所保留。 確保沒有其他工作階段參考指示的物件。 S = 共用。 保留工作階段被授予資源的共用存取權限。 U = 更新。 表示在最終可能會更新之資源上取得的更新鎖定。 它用來防止在多個會話鎖定資源以供稍後進行潛在更新時發生的常見死結形式。 X = 獨佔。 保留工作階段被授予資源的獨佔存取權限。 IS = 意圖共用。 表示意圖將 S 鎖定置於鎖定階層中的某些次級資源上。 IU = 意圖更新。 表示意圖將 U 鎖定置於鎖定階層中的某些次級資源上。 IX = 意圖獨佔。 表示意圖將 X 鎖定置於鎖定階層中的某些次級資源上。 SIU = 共用意圖更新。 表示對資源的共用存取,意圖取得鎖定階層中的次級資源的更新鎖定。 SIX = 共用意圖獨佔。 表示對資源的共用存取,意圖取得鎖定階層中的次級資源的獨佔鎖定。 UIX = 更新意圖獨佔。 表示資源上的更新鎖定保留,意圖取得鎖定階層中的次級資源的獨佔鎖定。 BU = 大量更新。 供大量作業使用。 RangeS_S = 共用索引鍵範圍和共用資源鎖定。 表示可序列化的範圍掃描。 RangeS_U = 共用索引鍵範圍和更新資源鎖定。 表示可序列化的更新掃描。 RangeI_N = 插入索引鍵範圍和 Null 資源鎖定。 在將新的索引鍵插入索引之前用來測試範圍。 RangeI_S = 索引鍵範圍轉換鎖定。 由RangeI_N和 S 鎖定重疊所建立。 RangeI_U = 由RangeI_N和 U 鎖定重疊所建立的索引鍵範圍轉換鎖定。 RangeI_X = 由RangeI_N和 X 鎖定重疊所建立的索引鍵範圍轉換鎖定。 RangeX_S = 以重疊RangeI_N和RangeS_S所建立的索引鍵範圍轉換鎖定。 鎖定。 RangeX_U = 由RangeI_N和RangeS_U鎖定重疊所建立的索引鍵範圍轉換鎖定。 RangeX_X = 獨佔索引鍵範圍和獨佔資源鎖定。 這是在更新範圍中的索引鍵時所使用的轉換鎖定。 |
狀態 | nvarchar(5) | 鎖定要求狀態: CNVRT:鎖定正從另一個模式進行轉換,但另一個進程會封鎖鎖定與衝突模式的鎖定。 GRANT:已取得鎖定。 WAIT:鎖定被另一個持有有衝突模式鎖定的進程封鎖。 |
備註
用戶可以透過下列方式控制讀取作業的鎖定:
使用SET TRANSACTION ISOLATION LEVEL 來指定會話的鎖定層級。 如需語法和限制,請參閱 SET TRANSACTION ISOLATION LEVEL (Transact-SQL) 。
使用鎖定數據表提示來指定FROM子句中數據表個別參考的鎖定層級。 如需語法和限制,請參閱數據表提示(Transact-SQL)。
與會話無關的所有分散式交易都是孤立的交易。 資料庫引擎 會指派所有孤立的分散式交易 SPID 值 -2,讓使用者更容易識別封鎖分散式交易。 如需詳細資訊,請參閱使用標示的交易以一致的方式復原相關資料庫 (完整復原模式)。
權限
需要 VIEW SERVER STATE 權限。
範例
A. 列出所有鎖定
下列範例會顯示目前保留在 資料庫引擎 實例中所有鎖定的相關信息。
USE master;
GO
EXEC sp_lock;
GO
B. 列出來自單一伺服器進程的鎖定
下列範例會顯示有關進程標識子 53
的資訊,包括鎖定。
USE master;
GO
EXEC sp_lock 53;
GO
另請參閱
sys.dm_tran_locks (Transact-SQL) (機器翻譯)
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks (Transact-SQL)
sys.dm_os_threads (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應