sys.dm_tran_locks (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric 中的仓库
返回 SQL Server 中有关当前活动的锁管理器资源的信息。 向锁管理器发出的已授予锁或正等待授予锁的每个当前活动请求分别对应一行。
结果集中的列大体分为两组:资源组和请求组。 资源组说明正在进行锁请求的资源,请求组说明锁请求。
注意
若要从 Azure Synapse Analytics 或 Analytics Platform System (PDW) 调用它,请使用名称 sys.dm_pdw_nodes_tran_locks。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
列名称 | 数据类型 | 说明 |
---|---|---|
resource_type | nvarchar(60) | 表示资源类型。 该值可以是下列值之一:DATABASE、FILE、OBJECT、PAGE、KEY、EXTENT、RID、APPLICATION、METADATA、HOBT 或 ALLOCATION_UNIT。 |
resource_subtype | nvarchar(60) | 表示 resource_type 的子类型。 从技术角度而言,可以在未持有父类型的非子类型化锁的情况下获取子类型锁。 不同的子类型之间以及与非子类型化的父类型之间都不会发生冲突。 并非所有资源类型都有子类型。 |
resource_database_id | int | 此资源位于其范围之内的数据库的 ID。 由锁管理器处理的所有资源均按该数据库 ID 划分范围。 |
resource_description | nvarchar(256) | 资源的说明,其中只包含从其他资源列中无法获取的信息。 |
resource_associated_entity_id | bigint | 数据库中与资源相关联的实体的 ID。 该值可以是对象 ID、Hobt ID 或分配单元 ID,具体视资源类型而定。 |
resource_lock_partition | Int | 已分区锁资源的锁分区 ID。 对于未分区锁资源,该值为 0。 |
request_mode | nvarchar(60) | 请求的模式。 对于已授予的请求,为已授予模式;对于等待请求,为正在请求的模式。 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(独占键范围和独占资源锁)= 这是在更新范围中的键时使用的转换锁。 |
request_type | nvarchar(60) | 请求类型。 该值为 LOCK。 |
request_status | nvarchar(60) | 该请求的当前状态。 可能的值有 GRANTED、CONVERT、WAIT、LOW_PRIORITY_CONVERT、LOW_PRIORITY_WAIT 或 ABORT_BLOCKERS。 有关低优先级的等待和中止阻塞程序的详细信息,请参阅 ALTER INDEX (Transact-SQL) 的 low_priority_lock_wait 部分。 |
request_reference_count | smallint | 返回同一请求程序已请求该资源的近似次数。 |
request_lifetime | int | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
request_session_id | int | 当前拥有该请求的会话 ID。 对于分布式事务和绑定事务,拥有请求的会话 ID 可能不同。 该值为 -2 时,指示该请求属于孤立的分布式事务。 该值为 -3 时,指示请求属于延迟的恢复事务,例如因其回滚未能成功完成而延迟恢复该回滚的事务。 |
request_exec_context_id | int | 当前拥有该请求的进程的执行上下文 ID。 |
request_request_id | int | 当前拥有该请求的进程的请求 ID(批处理 ID)。 每当事务的多个活动的结果集 (MARS) 连接更改时,该值便会更改。 |
request_owner_type | nvarchar(60) | 拥有请求的实体类型。 锁管理器请求可由各种实体所拥有。 可能的值包括: TRANSACTION = 请求由事务所有。 CURSOR = 请求由游标所有。 SESSION = 请求由用户会话所有。 SHARED_TRANSACTION_WORKSPACE = 请求由事务工作区的共享部分所有。 EXCLUSIVE_TRANSACTION_WORKSPACE = 请求由事务工作区的排他部分所有。 NOTIFICATION_OBJECT = 请求由内部 SQL Server 组件所有。 此组件已经请求锁管理器在有其他组件等待获取锁时进行通知。 FileTable 功能是使用此值的一个组件。 注意:工作空间在内部使用,用于持有登记的会话的锁。 |
request_owner_id | bigint | 此请求的特定所有者的 ID。 当事务是请求的所有者时,此值包含事务 ID。 当 FileTable 是请求的所有者时,request_owner_id 具有以下值之一:
|
request_owner_guid | uniqueidentifier | 此请求的特定所有者的 GUID。 该值仅供分布式事务使用,在该事务中,该值与事务的 MS DTC GUID 相对应。 |
request_owner_lockspace_id | nvarchar(32) | 标识为仅供参考。 不支持。 不保证以后的兼容性。 该值表示请求程序的锁空间 ID。 锁空间 ID 确定两个请求程序是否相互兼容以及在两者冲突的模式下是否可以向其授予锁。 |
lock_owner_address | varbinary(8) | 用于跟踪该请求的内部数据结构的内存地址。 该列可以与 sys.dm_os_waiting_tasks 中的 resource_address 列联接。 |
pdw_node_id | int | 适用于:Azure Synapse Analytics、Analytics Platform System (PDW) 此分发所在节点的标识符。 |
权限
对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE
权限。
在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Azure Active Directory 管理员帐户或##MS_ServerStateReader##
服务器角色中的成员身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
备注
已授予请求状态指示已将资源上的锁授予请求程序。 等待请求指示尚未授予请求。 request_status 列返回下列等待请求类型:
转换请求状态指示已向请求程序授予对资源的请求,并且请求程序当前正在等待升级到要授予的初始请求。
等待请求状态指示请求程序当前未持有对资源的已授予请求。
由于 sys.dm_tran_locks 从锁管理器的内部数据结构填充,因此维护该信息不会给常规处理带来额外的开销。 具体化该视图需要访问锁管理器的内部数据结构。 这可能会略微影响服务器中的常规处理。 这些影响应该很难察觉,并且应该只会影响频繁使用的资源。 由于该视图中的数据与活动的锁管理器状态相对应,因此该数据可能会随时更改,并且在获取和释放锁时会相应地添加和删除行。 鉴于保护锁管理器结构的完整性的性质,查询此视图的应用程序可能会遇到不可预知的性能。 该视图不包含历史信息。
仅当所有资源组列都相等时,才对同一资源执行两个请求。
您可以使用下列工具控制读取操作的锁定:
SET TRANSACTION ISOLATION LEVEL 用于指定会话的锁定级别。 有关详细信息,请参阅 SET TRANSACTION ISOLATION LEVEL (Transact-SQL)。
锁定表提示用于指定在 FROM 子句中表的单个引用的锁定级别。 有关语法和限制,请参阅表提示 (Transact-SQL)。
使用一个会话 ID 运行的资源可以有多个已授予锁。 在一个会话下运行的不同实体可以拥有同一资源的锁,并且相关信息显示在 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 列将具有不同的值。
在一个会话下运行的多个游标无法区分,被视为一个实体。
与会话 ID 值没有关联的分布式事务是孤立事务,向该事务分配的会话 ID 值为 -2。 有关详细信息,请参阅 KILL (Transact-SQL)。
锁定
锁加在 SQL Server 资源上(如在一个事务中读取或修改的行),以防止各种事务并发使用资源。 例如,如果一个排它 (X) 锁被一个事务加在某一表的某一行上,在这个锁被释放前,其他事务都不可以修改这一行。 尽可能少使用锁可提高并发性,从而改善性能。
资源详细信息
下表列出了在 resource_associated_entity_id 列中表示的资源。
资源类型 | 资源说明 | Resource_associated_entity_id |
---|---|---|
DATABASE | 表示数据库。 | 不适用 |
文件 | 表示数据库文件。 此文件可以是数据文件,也可以是日志文件。 | 不适用 |
OBJECT | 表示数据库对象。 此对象可以是数据表、视图、存储过程、扩展存储过程或任何具有对象 ID 的对象。 | 对象 ID |
PAGE | 表示数据文件中的单页。 | HoBt ID。 此值与 sys.partitions.hobt_id 相对应。 PAGE 资源并不总是有 HoBt ID,因为 HoBt ID 是可由调用方提供的额外信息,而有些调用方不能提供该信息。 |
KEY | 表示索引中的一行。 | HoBt ID。 此值与 sys.partitions.hobt_id 相对应。 |
EXTENT | 表示数据文件区。 区是由八个连续页构成的组。 | 不适用 |
RID | 表示堆中的物理行。 | HoBt ID。 此值与 sys.partitions.hobt_id 相对应。 RID 资源并不总是有 HoBt ID,因为 HoBt ID 是可由调用方提供的额外信息,而有些调用方不能提供该信息。 |
APPLICATION | 表示指定了应用程序的资源。 | 不适用 |
METADATA | 表示元数据信息。 | 不适用 |
HOBT | 表示堆或 B 树。 它们是基本访问路径结构。 | HoBt ID。 此值与 sys.partitions.hobt_id 相对应。 |
ALLOCATION_UNIT | 表示一组相关页,如索引分区。 每个分配单元都包含一个索引分配映射 (IAM) 链。 | 分配单元 ID。 此值与 sys.allocation_units.allocation_unit_id 相对应。 |
注意
SQL Server 文档在提到索引时一般使用 B 树这个术语。 在行存储索引中,SQL Server 实现了 B+ 树。 这不适用于列存储索引或内存中数据存储。 有关详细信息,请参阅 SQL Server 以及 Azure SQL 索引体系结构和设计指南。
下表列出了与每个资源类型相关联的子类型。
ResourceSubType | 同步 |
---|---|
ALLOCATION_UNIT.BULK_OPERATION_PAGE | 用于批处理操作的预先分配的页。 |
ALLOCATION_UNIT.PAGE_COUNT | 在延迟删除操作期间的分配单元页计数统计信息。 |
DATABASE.BULKOP_BACKUP_DB | 数据库备份与大容量操作。 |
DATABASE.BULKOP_BACKUP_LOG | 数据库日志备份与大容量操作。 |
DATABASE.CHANGE_TRACKING_CLEANUP | 更改跟踪清除任务。 |
DATABASE.CT_DDL | 数据库和表级更改跟踪 DDL 操作。 |
DATABASE.CONVERSATION_PRIORITY | Service Broker 会话优先级操作,如 CREATE BROKER PRIORITY。 |
DATABASE.DDL | 数据定义语言 (DDL) 操作与文件组操作(如删除)。 |
DATABASE.ENCRYPTION_SCAN | TDE 加密同步。 |
DATABASE.PLANGUIDE | 计划引导同步。 |
DATABASE.RESOURCE_GOVERNOR_DDL | 资源调控器操作的 DDL 操作,例如 ALTER RESOURCE POOL。 |
DATABASE.SHRINK | 数据库收缩操作。 |
DATABASE.STARTUP | 用于数据库启动同步。 |
FILE.SHRINK | 文件收缩操作。 |
HOBT.BULK_OPERATION | 下列隔离级别下的优化堆大容量加载操作与并发扫描:快照、未提交读和使用行版本控制的已提交读。 |
HOBT.INDEX_REORGANIZE | 堆或索引重组操作。 |
OBJECT.COMPILE | 存储过程编译。 |
OBJECT.INDEX_OPERATION | 索引操作。 |
OBJECT.UPDSTATS | 表的统计信息更新。 |
METADATA.ASSEMBLY | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASSEMBLY_CLR_NAME | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASSEMBLY_TOKEN | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASYMMETRIC_KEY | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT_ACTIONS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT_SPECIFICATION | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AVAILABILITY_GROUP | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CERTIFICATE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CHILD_INSTANCE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.COMPRESSED_FRAGMENT | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.COMPRESSED_ROWSET | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSTATION_ENDPOINT_RECV | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSTATION_ENDPOINT_SEND | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSATION_GROUP | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSATION_PRIORITY | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CREDENTIAL | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CRYPTOGRAPHIC_PROVIDER | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATA_SPACE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATABASE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATABASE_PRINCIPAL | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_MIRRORING_SESSION | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_MIRRORING_WITNESS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_PRINCIPAL_SID | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ENDPOINT | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ENDPOINT_WEBMETHOD | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.EXPR_COLUMN | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.EXPR_HASH | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_CATALOG | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_INDEX | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_STOPLIST | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INDEX_EXTENSION_SCHEME | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INDEXSTATS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INSTANTIATED_TYPE_HASH | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.MESSAGE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.METADATA_CACHE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PARTITION_FUNCTION | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PASSWORD_POLICY | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PERMISSIONS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PLAN_GUIDE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PLAN_GUIDE_HASH | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PLAN_GUIDE_SCOPE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.QNAME | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.QNAME_HASH | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.REMOTE_SERVICE_BINDING | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ROUTE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SCHEMA | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SECURITY_CACHE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SECURITY_DESCRIPTOR | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SEQUENCE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVER_EVENT_SESSIONS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVER_PRINCIPAL | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_BROKER_GUID | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_CONTRACT | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_MESSAGE_TYPE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.STATS | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SYMMETRIC_KEY | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.USER_TYPE | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_COLLECTION | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_COMPONENT | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_INDEX_QNAME | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
下表提供每个资源类型的 resource_description 列的格式。
资源 | 格式 | 描述 |
---|---|---|
DATABASE | 不适用 | resource_database_id 列中已提供数据库 ID。 |
文件 | file_id<> | 此资源所表示的文件 ID。 |
OBJECT | object_id<> | 此资源所表示的对象 ID。 此对象可以是 sys.objects 中列出的任何对象,不仅仅是表。 |
PAGE | <file_id>:<page_in_file> | 表示此资源所表示的页的文件和页 ID。 |
KEY | <hash_value> | 表示行中由此资源表示的键列的哈希。 |
EXTENT | <file_id>:<page_in_files> | 表示此资源所表示的区的文件和页 ID。 区 ID 与区中的第一页的页 ID 相同。 |
RID | <file_id>:<page_in_file>:<row_on_page> | 表示此资源所表示的行的页 ID 和行 ID。 请注意,如果关联的对象 ID 为 99,则此资源表示 IAM 链的第一个 IAM 页上的八个混合页槽之一。 |
APPLICATION | <DbPrincipalId>:<upto 32 characters>:(<hash_value>) | 表示用于划分此应用程序锁资源范围的数据库主体的 ID。 还包含与此应用程序锁资源相对应的资源字符串,最多包含其中的 32 个字符。 在某些情况下,因不再提供完整字符串而只能显示 2 个字符。 只有在恢复过程中重新获取的应用程序锁处于数据库恢复期间才会发生此行为。 哈希值表示与此应用程序锁资源相对应的完整资源字符串的哈希。 |
HOBT | 不适用 | 作为 resource_associated_entity_id 提供的 HoBt ID。 |
ALLOCATION_UNIT | 不适用 | 作为 resource_associated_entity_id 提供的分配单元 ID。 |
METADATA.ASSEMBLY | assembly_id = A | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASSEMBLY_CLR_NAME | $qname_id = Q | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASSEMBLY_TOKEN | assembly_id = A, $token_id | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ASSYMMETRIC_KEY | asymmetric_key_id = A | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT | audit_id = A | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT_ACTIONS | device_id = D, major_id = M | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AUDIT_SPECIFICATION | audit_specification_id = A | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.AVAILABILITY_GROUP | availability_group_id = A | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CERTIFICATE | certificate_id = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CHILD_INSTANCE | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.COMPRESSED_FRAGMENT | object_id = O , compressed_fragment_id = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.COMPRESSED_ROW | object_id = O | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSTATION_ENDPOINT_RECV | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSTATION_ENDPOINT_SEND | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSATION_GROUP | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CONVERSATION_PRIORITY | conversation_priority_id = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CREDENTIAL | credential_id = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.CRYPTOGRAPHIC_PROVIDER | provider_id = P | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATA_SPACE | data_space_id = D | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATABASE | database_id = D | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DATABASE_PRINCIPAL | principal_id = P | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_MIRRORING_SESSION | database_id = D | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_MIRRORING_WITNESS | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.DB_PRINCIPAL_SID | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ENDPOINT | endpoint_id = E | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ENDPOINT_WEBMETHOD | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_CATALOG | fulltext_catalog_id = F | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_INDEX | object_id = O | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.EXPR_COLUMN | object_id = O, column_id = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.EXPR_HASH | object_id = O, $hash = H | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_CATALOG | fulltext_catalog_id = F | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_INDEX | object_id = O | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.FULLTEXT_STOPLIST | fulltext_stoplist_id = F | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INDEX_EXTENSION_SCHEME | index_extension_id = I | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INDEXSTATS | object_id = O, index_id or stats_id = I | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.INSTANTIATED_TYPE_HASH | user_type_id = U, hash = H | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.MESSAGE | message_id = M | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.METADATA_CACHE | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PARTITION_FUNCTION | function_id = F | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PASSWORD_POLICY | principal_id = P | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PERMISSIONS | class = C | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.PLAN_GUIDE | plan_guide_id = P | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA. PLAN_GUIDE_HASH | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA. PLAN_GUIDE_SCOPE | scope_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.QNAME | $qname_id = Q | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.QNAME_HASH | $qname_scope_id = Q, $qname_hash = H | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.REMOTE_SERVICE_BINDING | remote_service_binding_id = R | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.ROUTE | route_id = R | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SCHEMA | schema_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SECURITY_CACHE | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SECURITY_DESCRIPTOR | sd_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SEQUENCE | $seq_type = S, object_id = O | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVER | server_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVER_EVENT_SESSIONS | event_session_id = E | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVER_PRINCIPAL | principal_id = P | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE | service_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_BROKER_GUID | $hash = H1:H2:H3 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_CONTRACT | service_contract_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SERVICE_MESSAGE_TYPE | message_type_id = M | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.STATS | object_id = O, stats_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.SYMMETRIC_KEY | symmetric_key_id = S | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.USER_TYPE | user_type_id = U | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_COLLECTION | xml_collection_id = X | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_COMPONENT | xml_component_id = X | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
METADATA.XML_INDEX_QNAME | object_id = O, $qname_id = Q | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
以下 XEvent 与分区 SWITCH 和联机索引重新生成相关。 有关语法的信息,请参阅 ALTER TABLE (Transact-SQL) 和 ALTER INDEX (Transact-SQL)。
lock_request_priority_state
process_killed_by_abort_blockers
ddl_with_wait_at_low_priority
联机索引操作的现有 XEvent progress_report_online_index_operation 是通过添加 partition_number 和 partition_id 扩展的。
示例
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. 将会话信息链接到操作系统线程
下面的示例返回将会话 ID 与 Windows 线程 ID 相关联的信息。 可以在 Windows 性能监视器中监视线程的性能。 该查询不返回当前正在休眠的会话 ID。
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 (Transact-SQL)
动态管理视图和函数 (Transact-SQL)
与事务有关的动态管理视图和函数 (Transact-SQL)
SQL Server - Locks 对象