sys.dm_tran_locks
傳回有關目前使用中之鎖定管理員資源的資訊。每一個資料列,都代表一個針對已經授與或者等待授與的鎖定,發給鎖定管理員的目前使用中要求。
結果集中的資料行,共分成資源和要求兩個主要群組。資源群組描述鎖定要求所針對的資源,而要求群組則描述該鎖定要求。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
resource_type |
nvarchar(120) |
代表資源類型。這個值可以是下列值之一:DATABASE、FILE、OBJECT、PAGE、KEY、EXTENT、RID、APPLICATION、METADATA、HOBT 或 ALLOCATION_UNIT。 |
resource_subtype |
nvarchar(120) |
代表 resource_type 的子類型。在技術上即使不保留父類型的非子類型鎖定,它也可以取得子類型鎖定。不同的子類型,並不會彼此衝突,也不會與非子類型的父類型相衝突。不過並非所有的資源類型都有子類型。 |
resource_database_id |
int |
決定這個資源範圍所用的資料庫識別碼。所有由鎖定管理員處理的資源,都由資料庫識別碼決定範圍。 |
resource_description |
nvarchar(512) |
資源的描述,其中只包含無法從其他資源資料行取得的資訊。 |
resource_associated_entity_id |
bigint |
資料庫中與資源相關聯的實體識別碼。視資源類型而定,它可以是物件識別碼、Hobt 識別碼或配置單位識別碼。 |
resource_lock_partition |
int |
資料分割鎖定資源的鎖定資料分割識別碼。非資料分割鎖定資源的值是 0。 |
request_mode |
nvarchar(120) |
要求的模式。如果是已授與的要求,則為已授與的模式;如果是等待授與的要求,則為正在要求的模式。 |
request_type |
nvarchar(120) |
要求類型。值為 LOCK。 |
request_status |
nvarchar(120) |
這項要求的目前狀態。可能的值為 GRANTED、CONVERT 或 WAIT。 |
request_reference_count |
smallint |
傳回同一個要求器要求這項資源的大約次數。 |
request_lifetime |
int |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
request_session_id |
int |
目前擁有這項要求的工作階段識別碼。主控工作階段識別碼會隨著分散式和繫結式交易而改變。-2 值表示要求屬於被遺棄的分散式交易。-3 值表示該要求是屬於延遲的復原交易,例如,由於回復作業無法順利完成,因而在復原時延遲的交易。 |
request_exec_context_id |
int |
目前擁有這項要求之處理序的工作階段內容識別碼。 |
request_request_id |
int |
目前擁有這項要求之處理序的要求識別碼 (批次識別碼)。只要交易的使用中 Multiple Active Result Set (MARS) 連接一改變,這個值就會隨之改變。 |
request_owner_type |
nvarchar(120) |
擁有要求的實體類型。鎖定管理員要求可以由各種實體所擁有。可能的值為: TRANSACTION = 要求是由交易所擁有。 CURSOR = 要求是由資料指標所擁有。 SESSION = 要求是由使用者工作階段所擁有。 SHARED_TRANSACTION_WORKSPACE = 要求是由交易工作空間的共用部分所擁有。 EXCLUSIVE_TRANSACTION_WORKSPACE = 要求是由交易工作空間的獨佔部分所擁有。 |
request_owner_id |
bigint |
這項要求的特定擁有者識別碼。這個值只用在作為交易識別碼使用的交易。 |
request_owner_guid |
uniqueidentifier |
這項要求的特定擁有者 GUID。只有值對應於該交易之 MS DTC GUID 的分散式交易才會使用這個值。 |
request_owner_lockspace_id |
nvarchar(64) |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 這個值代表要求器的鎖定空間識別碼。鎖定空間識別碼可以判斷兩個要求器是否彼此相容,如果其模式會彼此衝突,是否可被授與鎖定。 |
lock_owner_address |
varbinary(8) |
追蹤這項要求所用的內部資料結構記憶體位址。這個資料行可以與 sys.dm_os_waiting_tasks 中的 resource_address 資料行聯結。 |
權限
需要伺服器的 VIEW SERVER STATE 權限。
備註
如果是已授與的要求狀態,表示已將資源鎖定授與要求器。而等待中的要求,表示尚未授與該要求。request_status 資料行會傳回下列等候要求類型:
- 如果是轉換要求狀態,表示要求器已被授與該資源的要求,目前正在等候升級為即將授與的起始要求。
- 如果是等候要求狀態,則表示要求器目前沒有已授與的資源要求。
由於 sys.dm_tran_locks 是從內部鎖定管理員資料結構擴展而來,因此維護這些資訊,並不會對正常的處理作業增加額外的負擔。若要將檢視具體化,需要具備鎖定管理員內部資料結構的存取權。這可能會對伺服器的正常處理作業產生一些影響。這些影響應該很難查覺,而且只會影響到常用的資源。由於這份檢視的資料對應到活性鎖定管理員狀態,因此資料隨時可以變更,而且只要一取得和釋放鎖定,就可以加入和移除資料列。這份檢視沒有歷程記錄資訊。
只有當所有的資源群組資料行都相等時,才能在相同的資源上進行兩項要求。
您可以利用下列工具控制讀取作業的鎖定:
- SET TRANSACTION ISOLATION LEVEL,用來指定工作階段的鎖定層級。如需詳細資訊,請參閱<SET TRANSACTION ISOLATION LEVEL (Transact-SQL)>。
- 鎖定資料表提示,用來在 FROM 子句中指定資料表之個別參考的鎖定層級。關於語法和限制,請參閱<資料表提示 (Transact-SQL)>。
在一個工作階段識別碼下執行資源,可以有一個以上的授與鎖定。在一個工作階段下執行的不同實體,可以在相同資源各自擁有一個鎖定,而資訊會顯示在 sys.dm_tran_locks 傳回的 request_owner_type 和 request_owner_id 資料行中。如果同一個 request_owner_type 有多個執行個體,則會用 request_owner_id 資料行來區別每一個執行個體。如果是分散式交易,則 request_owner_type 和 request_owner_guid 資料行會顯示不同的實體資訊。
例如,假設工作階段 S1 在 Table1 擁有一個共用鎖定,而在工作階段 S1 下執行的交易 T1 也在 Table1 擁有共用鎖定。在本例中,sys.dm_tran_locks 所傳回的 resource_description 資料行,會顯示相同資源的兩個執行個體。request_owner_type 資料行會把其中一個執行個體顯示為工作階段,把另一個顯示為交易。同時,resource_owner_id 資料行也會有不同的值。
附註: |
---|
在一個工作階段下執行的多個資料指標是無法區分的,它們會被視為一個實體。 如需有關 SQL Server Database Engine 所用之鎖定類型的詳細資訊,請參閱<Database Engine 中的鎖定>。 |
與工作階段識別碼值無關的分散式交易是被遺棄的交易,系統會指派 -2 值作為交易的工作階段識別碼。如需詳細資訊,請參閱<KILL (Transact-SQL)>。
資源詳細資料
下表列出 resource_associated_entity_id 資料行中所呈現的資源。
資源類型 | 資源描述 | Resource_associated_entity_id |
---|---|---|
DATABASE |
代表資料庫。 |
不適用 |
FILE |
代表資料庫檔案。這個檔案可以是資料或記錄檔。 |
不適用 |
OBJECT |
代表資料庫物件。這個物件可以是資料表、檢視、預存程序、擴充預存程序或任何具有物件識別碼的物件。 |
物件識別碼 |
PAGE |
代表資料檔中的一頁。 |
HoBt 識別碼。這個值對應於 sys.partitions.hobt_id。HoBt 識別碼不一定都適用於 PAGE 資源,因為 HoBt 識別碼是可由呼叫者提供的額外資訊,但不是所有的呼叫者都可以提供這些資訊。 |
KEY |
代表索引中的一個資料列。 |
HoBt 識別碼。這個值對應於 sys.partitions.hobt_id。 |
EXTENT |
代表資料檔範圍。一個範圍是八個連續頁的群組。 |
不適用 |
RID |
代表堆積中的一個實體資料列。 |
HoBt 識別碼。這個值對應於 sys.partitions.hobt_id。HoBt 識別碼不一定都適用於 RID 資源,因為 HoBt 識別碼是可由呼叫者提供的額外資訊,但不是所有的呼叫者都可以提供這些資訊。 |
APPLICATION |
代表應用程式指定的資源。 |
不適用 |
METADATA |
代表中繼資料資訊。 |
不適用 |
HOBT |
代表堆積或 B 型樹狀目錄。這些是基本的存取路徑結構。 |
HoBt 識別碼。這個值對應於 sys.partitions.hobt_id。 |
ALLOCATION_UNIT |
代表一組相關頁面,例如,索引資料分割。每一個配置單位都涵蓋一個索引配置對應 (IAM) 鏈結。 |
配置單位識別碼。這個值對應於 sys.allocation_units.allocation_unit_id。 |
下表列出與每個資源類型相關聯的子類型。
ResourceSubType | 同步處理 |
---|---|
DATABASE.BULKOP_BACKUP_DB |
含大量作業的資料庫備份。 |
DATABASE.BULKOP_BACKUP_LOG |
含大量作業的資料庫記錄備份。 |
DATABASE.DDL |
含檔案群組作業的資料定義語言 (DDL) 作業,例如卸除。 |
DATABASE.STARTUP |
用來同步處理資料庫啟動。 |
TABLE.UPDSTATS |
資料表的統計資料更新。 |
TABLE.COMPILE |
預存程序編譯。 |
TABLE.INDEX_OPERATION |
索引作業。 |
HOBT.INDEX_REORGANIZE |
堆積或索引重新組織作業。 |
HOBT.BULK_OPERATION |
下列隔離等級下具有並行掃描的堆積最佳化大量載入作業:快照集、讀取未認可,以及使用資料列版本控制的讀取認可。 |
ALLOCATION_UNIT.PAGE_COUNT |
進行延遲卸除作業時的配置單位頁面計數統計資料。 |
METADATA.INDEXSTATS |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.STATS |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_COLLECTION |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SEQUENCE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.QNAME |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY_CLR_NAME |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY_TOKEN |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.PARTITION_FUNCTION |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATA_SPACE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.USER_TYPE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_PRINCIPAL_SID |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATABASE_PRINCIPAL |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SCHEMA |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_COMPONENT |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVER |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.INSTANTIATED_TYPE_HASH |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_MIRRORING_SESSION |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ENDPOINT |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SECURITY_CACHE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_MIRRORING_WITNESS |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CREDENTIAL |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SECURITY_DESCRIPTOR |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_BROKER_GUID |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSTATION_ENDPOINT_RECV |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATABASE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSATION_GROUP |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ENDPOINT_WEBMETHOD |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSYMMETRIC_KEY |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.FULLTEXT_CATALOG |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.FULLTEXT_INDEX |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVER_PRINCIPAL |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ROUTE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.MESSAGE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.QNAME_HASH |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_MESSAGE_TYPE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSTATION_ENDPOINT_SEND |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CERTIFICATE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SYMMETRIC_KEY |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_INDEX_QNAME |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_CONTRACT |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.REMOTE_SERVICE_BINDING |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.METADATA_CACHE |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
下表提供各種資源類型之 resource_description 資料行的格式。
資源 | 格式 | 描述 |
---|---|---|
DATABASE |
不適用 |
resource_database_id 資料行中已經提供了資料庫識別碼。 |
FILE |
<file_id> |
這項資源所代表的檔案識別碼。 |
OBJECT |
<object_id> |
這項資源所代表的物件識別碼。這個物件可以是 sys.objects 中列出的任何物件,而不只是資料表。 |
PAGE |
<file_id>:<page_in_file> |
代表這項資源所代表之頁面的檔案和頁面識別碼。 |
KEY |
<hash_value> |
代表這項資源所代表之資料列的索引鍵資料行雜湊。 |
EXTENT |
<file_id>:<page_in_files> |
代表這項資源所代表之範圍的檔案和頁面識別碼。這個範圍識別碼,與範圍中第一頁的頁面識別碼相同。 |
RID |
<file_id>:<page_in_file>:<row_on_page> |
代表這項資源所代表之資料列的頁面識別碼和資料列識別碼。請注意,如果相關聯的物件識別碼是 99,這項資源就代表 IAM 鏈結的第一個 IAM 頁面上,八個混合頁面位置之一。 |
APPLICATION |
<DbPrincipalId>:<upto 32 characters>:(<hash_value>) |
代表制定這個應用程式鎖定資源範圍所用之資料庫主體的識別碼。其中包含來自對應於這個應用程式鎖定資源的資源字串,最多可以包含 32 個字元。在某些情況下,由於完整字串已經無法使用,因此只能顯示 2 個字元。這個行為只發生在資料庫復原時,復原程序必須重新取得應用程式鎖定。雜湊值代表對應於這個應用程式鎖定資源的完整資源字串雜湊。 |
HOBT |
不適用 |
HoBt 識別碼會當做 resource_associated_entity_id 加入。 |
ALLOCATION_UNIT |
不適用 |
配置單位識別碼會被當做 resource_associated_entity_id 併入。 |
METADATA.SEQUENCE |
$seq_type = S, object_id = O |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.STATS |
object_id = O, stats_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SCHEMA |
schema_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.INDEXSTATS |
object_id = O, index_id or stats_id = I |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATABASE_PRINCIPAL |
principal_id = P |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_PRINCIPAL_SID |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.USER_TYPE |
user_type_id = U |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATA_SPACE |
data_space_id = D |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.PARTITION_FUNCTION |
function_id = F |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.PARTITION_FUNCTION |
function_id = F |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY |
assembly_id = A |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY_TOKEN |
assembly_id = A, $token_id = T |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSEMBLY_CLR_NAME |
$qname_id = Q |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.QNAME |
$qname_id = Q |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_COLLECTION |
xml_collection_id = X |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_COMPONENT |
xml_component_id = X |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.QNAME_HASH |
$qname_scope_id = Q, $qname_hash = H |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.XML_INDEX_QNAME |
object_id = O, $qname_id = Q |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_MESSAGE_TYPE |
message_type_id = M |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_CONTRACT |
service_contract_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE |
service_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.REMOTE_SERVICE_BINDING |
remote_service_binding_id = R |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ROUTE |
route_id = R |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.FULLTEXT_INDEX |
object_id = O |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.FULLTEXT_CATALOG |
fulltext_catalog_id = F |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSATION_GROUP |
conversation_group_id = C |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSTATION_ENDPOINT_SEND |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CONVERSTATION_ENDPOINT_RECV |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SYMMETRIC_KEY |
symmetric_key_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CERTIFICATE |
certificate_id = C |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ASSYMMETRIC_KEY |
asymmetric_key_id = A |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DATABASE |
database_id = D |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.MESSAGE |
message_id = M |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVER_PRINCIPAL |
principal_id = P |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVER |
server_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ENDPOINT |
endpoint_id = E |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.ENDPOINT_WEBMETHOD |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_MIRRORING_SESSION |
database_id = D |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.DB_MIRRORING_WITNESS |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_BROKER_GUID |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SERVICE_BROKER_GUID |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.CREDENTIAL |
credential_id = C |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.INSTANTIATED_TYPE_HASH |
user_type_id = U, hash = H1 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SECURITY_DESCRIPTOR |
sd_id = S |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.SECURITY_CACHE |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
METADATA.METADATA_CACHE |
$hash = H1:H2:H3 |
警告僅做為識別目的。不支援。我們無法保證未來的相容性。 |
範例
A. 搭配其他工具使用 sys.dm_tran_locks
下列程式碼範例所示範的狀況,是更新作業被另一項交易封鎖。利用 sys.dm_tran_locks 和其他工具,提供有關鎖定資源的資訊。
USE tempdb;
GO
-- Create test table and index.
CREATE TABLE t_lock
(
c1 int, c2 int
);
GO
CREATE INDEX t_lock_ci on t_lock(c1);
GO
-- Insert values into test table
INSERT INTO t_lock VALUES (1, 1);
INSERT INTO t_lock VALUES (2,2);
INSERT INTO t_lock VALUES (3,3);
INSERT INTO t_lock VALUES (4,4);
INSERT INTO t_lock VALUES (5,5);
INSERT INTO t_lock VALUES (6,6);
GO
-- Session 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRAN
SELECT c1
FROM t_lock
WITH(holdlock, rowlock);
-- Session 2
BEGIN TRAN
UPDATE t_lock SET c1 = 10
下列查詢將會顯示鎖定資訊。<dbid>
的值應該會被取代成 sys.databases 中的 database_id。
SELECT resource_type, resource_associated_entity_id,
request_status, request_mode,request_session_id,
resource_description
FROM sys.dm_tran_locks
WHERE resource_database_id = <dbid>
下列查詢會利用上一項查詢的 resource_associated_entity_id
來傳回物件資訊。您必須在連接到包含物件的資料庫時執行這項查詢。
SELECT object_name(object_id), *
FROM sys.partitions
WHERE hobt_id=<resource_associated_entity_id>
下列查詢將會顯示封鎖資訊。
SELECT
t1.resource_type,
t1.resource_database_id,
t1.resource_associated_entity_id,
t1.request_mode,
t1.request_session_id,
t2.blocking_session_id
FROM sys.dm_tran_locks as t1
INNER JOIN sys.dm_os_waiting_tasks as t2
ON t1.lock_owner_address = t2.resource_address;
透過回復交易的方式來釋放資源。
-- Session 1
ROLLBACK;
GO
-- Session 2
ROLLBACK;
GO
B. 將工作階段資訊連結到作業系統執行緒
下列範例會傳回將工作階段識別碼關聯到 Windows 執行緒識別碼的資訊。執行緒的效能可以在 Windows 效能監視器中監視。這項查詢不會傳回目前睡眠中的工作階段識別碼。
SELECT STasks.session_id, SThreads.os_thread_id
FROM sys.dm_os_tasks AS STasks
INNER JOIN sys.dm_os_threads AS SThreads
ON STasks.worker_address = SThreads.worker_address
WHERE STasks.session_id IS NOT NULL
ORDER BY STasks.session_id;
GO
請參閱
參考
sys.dm_tran_database_transactions
動態管理檢視和函數
交易相關動態管理檢視和函數