开发者社区> 问答> 正文

【RDS】云数据库RDS SQL Server版时,如何查看锁信息?

已解决

云数据库RDS SQL Server版时,如何查看锁信息?

展开
收起
云上猫猫 2022-01-14 15:14:24 1187 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    您可以通过sys.dm_tran_locks系统视图查看锁的信息,具体有下列两种情况:

    • 数据库的锁信息

    您可以执行以下SQL语句,查询哪些数据库有锁。

    select str(request_session_id, 4, 0) as spid,
           convert(varchar(20), db_name(resource_database_id)) as DB_Name,
           case
               when resource_database_id = db_id()
                    and resource_type = 'OBJECT' then convert(char(20), object_name(resource_Associated_Entity_id))
               else convert(char(20), resource_Associated_Entity_id)
           end as object,
           convert(varchar(12), resource_type) as resrc_type,
           convert(varchar(12), request_type) as req_type,
           convert(char(3), request_mode) as mode,
           convert(varchar(8), request_status) as status
    from sys.dm_tran_locks
    order by request_session_id desc;
    

    系统显示类似如下。

    6.png

    说明:MODE列是锁的模式,介绍如下:

    共享(S)用于不更改或不更新数据的操作(只读操作),例如SELECT语句。

    更新(U)用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。

    排它(X)用于数据修改操作,例如INSERT、UPDATE或DELETE,确保不会同时同一资源进行多重更新。

    意向锁用于建立锁的层次结构。意向锁的类型为:意向共享(IS)、意向排它(IX)以及与意向排它共享(SIX)。

    架构锁在执行依赖于表架构的操作时使用。架构锁的类型为:架构修改(Sch-M)和架构稳定性(Sch-S)。

    大容量更新(BU)向表中大容量复制数据并指定了TABLOCK提示时使用。

    • 数据表的锁信息

    您可以执行以下SQL语句,查询哪些数据表有锁。

    select request_session_id sessionid,
           resource_type type,
                         convert(varchar(20), db_name(resource_database_id)) as db_name,
                         OBJECT_NAME(resource_associated_entity_id, resource_database_id) objectname,
                         request_mode rmode,
                         request_status rstatus
    from sys.dm_tran_locks
    where resource_type in ('OBJECT')
    

    系统显示类似如下。

    7.png

    说明: sessionid为锁表的进程。 objectname为被锁的表名。

    2022-01-14 15:16:09
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像