查询SQL Server表锁情况的简单方法(sqlserver查表锁)
随着数据库在日常应用中起到越来越重要的作用,性能管理越来越受到重视。而表锁,作为数据库性能的最基础因素之一,更是得到越来越多的重视。SQL Server表锁情况查询,也是SQL Server DBA在日常管理中必不可少的操作。下面,就介绍一下查询SQL Server表锁情况的简单方法。
### 方法一:查询sys.dm_tran_locks视图
sys.dm_tran_locks视图是SQL Server提供的系统视图,能够把所有表锁的相关信息输出出来,是获得表锁情况的一种非常有用的方式。
例如,下面这句SQL语句可以查询指定数据库中,被锁定的表及锁定状态:
“`sql
SELECT cast (resource_database_id AS VARCHAR(10)) AS DatabaseID , db_name (resource_database_id) AS [DatabaseName], object_name (resource_associated_entity_id) AS [TableName], OBJECT_SCHEMA_NAME (resource_associated_entity_id) AS [SchemaName], request_mode AS [LockMode],request_status AS LockStatus FROM sys.dm_tran_locks WHERE resource_type = ‘OBJECT’
结果如下:
![image.png](https://static001.geekbang.org/resource/image/19/10/19aa7ba184a46a851ed45ee6105ad210.png)
可以看到,该查询的结果列出了指定数据库中,所有被表锁的情况,包括每张表被锁定的模式,以及锁定的情况。
### 方法二:查询sp_lock存储过程
sp_lock是SQL Server提供的系统存储过程,可以用它查询指定数据库中,被表锁情况。
例如,下面这句SQL语句可以查询指定数据库中,被表锁情况:
```sqlEXEC sp_lock
![image.png](https://static001.geekbang.org/resource/image/ea/18/eaabb50a661f5a5ec5ddd47eb000377e.png)
可以看到,存储过程sp_lock,也是获得表锁情况的一个非常有用的方法。
### 总结
以上介绍的,就是查询SQL Server表锁情况的简单方法。这其中,通过查询sys.dm_tran_locks视图,以及使用sp_lock存储过程,都是一种常用的方法。通过它们,能够较为方便的获得数据库中所有被表锁的情况,及时发现、解决表锁故障,保障数据库性能,提升数据库服务质量。