sp_lock (Transact-SQL)
更新: 2006 年 4 月 14 日
報告鎖定的相關資訊。
重要事項: |
---|
Microsoft SQL Server 2005 包括這個系統預存程序主題的目的,是為了與舊版相容。若要取得 SQL Server 2005 Database Engine 中之鎖定的相關資訊,請使用 sys.dm_tran_locks 動態管理檢視。如需詳細資訊,請參閱<sys.dm_tran_locks>。 |
重要事項: |
---|
這項功能已變更,與舊版 SQL Server 不同。如需詳細資訊,請參閱<SQL Server 2005 中對於 Database Engine 的突破性變更>。 |
語法
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
引數
- [ @spid1 = ] 'session ID1'
這是 sys.dm_exec_sessions 中,使用者想要取得其鎖定資訊的 Database Engine 工作階段識別碼 (在 SQL Server 2000 和更早版本中稱為 SPID)。session ID1 是 int,預設值是 NULL。請執行 sp_who 來取得該工作階段的處理序相關資訊。如果未指定 session ID1,就會顯示所有鎖定的相關資訊。
- [ @spid2 = ] 'session ID2'
這是在 sys.dm_exec_sessions 中,可能與 session ID1 同時擁有鎖定,且使用者也需要其相關資訊的另一個 Database Engine 工作階段識別碼。session ID2 是 int,預設值是 NULL。
傳回碼值
0 (成功)
結果集
sp_lock 結果集會針對 @spid1 和 @spid2 參數中指定的工作階段所保留的每個鎖定,各包含一個資料列。如果既未指定 @spid1,也未指定 @spid2,結果集會報告在 Database Engine 的執行個體中,目前在使用中之所有工作階段的鎖定。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
spid |
smallint |
要求鎖定之處理序的 Database Engine 工作階段識別碼。 |
dbid |
smallint |
保留鎖定之資料庫的識別碼。您可以利用 DB_NAME() 函數來識別資料庫。 |
ObjId |
int |
保留鎖定之物件的識別碼。您可以在相關資料庫中,利用 OBJECT_NAME() 函數來識別物件。99 這個值是一個特殊情況,表示用來記錄資料庫頁面配置之某系統頁面的鎖定。 |
IndId |
smallint |
保留鎖定之索引的識別碼。 |
Type |
nchar(4) |
鎖定類型: RID = 鎖定資料表中資料列識別碼 (RID) 所識別的單一資料列。 KEY = 在索引內鎖定,用來保護可序列化交易中的某個索引鍵範圍。 PAG = 鎖定資料或索引頁面。 EXT = 鎖定範圍。 TAB = 鎖定整份資料表,其中包括所有資料和索引。 DB = 鎖定資料庫。 FIL = 鎖定資料庫檔案。 APP = 鎖定應用程式指定資源。 MD = 鎖定中繼資料或目錄資訊。 HBT = 鎖定堆積或 B 型樹狀目錄索引。SQL Server 2005 中的這項資訊並不完整。 AU = 鎖定配置單位。SQL Server 2005 中的這項資訊並不完整。 |
Resource |
nchar(32) |
用來識別鎖定資源的值。這個值的格式會隨著 Type 資料行所識別之資源類型而不同: Type 值:Resource 值 RID:格式為 fileid:pagenumber:rid 的識別碼,fileid 用來識別包含頁面的檔案,pagenumber 用來識別包含資料列的頁面,rid 用來識別頁面的特定資料列。fileid 符合 sys.database_files 目錄檢視中的 file_id 資料行。 KEY:Database Engine 在內部使用的十六進位號碼。 PAG:格式為 fileid:pagenumber 的號碼,其中 fileid 用來識別包含頁面的檔案,pagenumber 用來識別頁面。 EXT:用來識別範圍內第一頁的號碼。這個號碼的格式為 fileid:pagenumber。 TAB:無資訊,因為已在 ObjId 資料行中識別資料表。 DB:無資訊,因為已在 dbid 資料行中識別資料庫。 FIL:檔案的識別碼,它符合 sys.database_files 目錄檢視中的 file_id 資料行。 APP:鎖定之應用程式資源的專屬識別碼。格式如下:DbPrincipleId:<資源字串的前兩個至 16 個字元><雜湊值>。 MD:隨資源類型而不同。如需詳細資訊,請參閱<sys.dm_tran_locks>中之 resource_description 資料行的描述。 HBT:未提供任何資訊。請改用 sys.dm_tran_locks 動態管理檢視。 AU:未提供任何資訊。請改用 sys.dm_tran_locks 動態管理檢視。 |
Mode |
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 = 獨佔索引鍵範圍和獨佔資源鎖定。這是更新範圍中的索引鍵時所用的轉換鎖定。 |
Status |
nvarchar(5) |
鎖定要求狀態: CNVRT:正在從另一個模式轉換鎖定,但持有模式衝突的鎖定之另一處理序會封鎖轉換。 GRANT:已取得鎖定。 WAIT:持有模式衝突的鎖定之另一處理序會封鎖鎖定。 |
備註
使用者可以利用下列方式來控制讀取作業的鎖定:
- 利用 SET TRANSACTION ISOLATION LEVEL 來指定工作階段的鎖定層級。關於語法和限制,請參閱<SET TRANSACTION ISOLATION LEVEL (Transact-SQL)>。
- 利用鎖定資料表提示,在 FROM 子句中指定資料表之個別參考的鎖定層級。關於語法和限制,請參閱<資料表提示 (Transact-SQL)>。
如需有關 Database Engine 所用之鎖定類型的詳細資訊,請參閱<Database Engine 中的鎖定>。
所有未關聯於工作階段的分散式交易都是被遺棄的交易。Database Engine 會指派 -2 的 SPID 值給所有被遺棄的分散式交易,讓使用者更容易識別封鎖的分散式交易。如需詳細資訊,請參閱<使用標示的交易 (完整復原模式)>。
權限
需要 VIEW SERVER STATE 權限。
範例
A. 列出所有鎖定
下列範例會顯示 Database Engine 的執行個體目前保留之所有鎖定的相關資訊。
USE master;
GO
EXEC sp_lock;
GO
B. 列出單一伺服器處理序的鎖定
下列範例會顯示處理序識別碼 53
的相關資訊,其中包括鎖定。
USE master;
GO
EXEC sp_lock 53;
GO
請參閱
參考
sys.dm_tran_locks
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks
sys.dm_os_threads
說明及資訊
變更歷程記錄
版本
歷程記錄
2006 年 4 月 14 日
詞彙
定義
修改的內容:
- 移動範例到 sys.dm_os_tasks。
- 以工作階段識別碼取代 SPID 的參考。