怎样查询出SQLSERVER被锁的表,以锁表的SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样查询出SQLSERVER被锁的表,以锁表的SQL语句相关的知识,希望对你有一定的参考价值。

查看被锁表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
spid 锁表进程
tableName 被锁表名
参考技术A 找到事务号,可以从 events_statements_current 找到对应的 SQL 语句:
SQL_TEXT: delete from action1 where id = 3 //具体的sql语句
DIGEST: 8f9cdb489c76ec0e324f947cc3faaa7c
DIGEST_TEXT: DELETE FROM `action1` WHERE `id` = ?
CURRENT_SCHEMA: test1
OBJECT_TYPE: NULL
OBJECT_SCHEMA: NULL
OBJECT_NAME: NULL
OBJECT_INSTANCE_BEGIN: NULL
mysql_ERRNO: 0
RETURNED_SQLSTATE: 00000
MESSAGE_TEXT: NULL
ERRORS: 0
WARNINGS: 0
ROWS_AFFECTED: 1
ROWS_SENT: 0
ROWS_EXAMINED: 3
CREATED_TMP_DISK_TABLES: 0
CREATED_TMP_TABLES: 0
SELECT_FULL_JOIN: 0
SELECT_FULL_RANGE_JOIN: 0
SELECT_RANGE: 0
SELECT_RANGE_CHECK: 0
SELECT_SCAN: 0
SORT_MERGE_PASSES: 0
SORT_RANGE: 0
SORT_ROWS: 0
SORT_SCAN: 0
NO_INDEX_USED: 0
NO_GOOD_INDEX_USED: 0
NESTING_EVENT_ID: NULL
NESTING_EVENT_TYPE: NULL
NESTING_EVENT_LEVEL: 0
1 row in set (0.00 sec)

可以看到是一条 delete 阻塞了后续的 update,生产环境中可以拿着这条 SQL 语句询问开发,是不是有 kill 的必要。

MySQL锁表和解锁操作

参考技术A 1、确定mysql有锁表的情况则使用以下命令查看锁表进程

2、杀掉查询结果中已经锁表的trx_mysql_thread_id

扩展:
1、查看锁的事务

2、查看等待锁的事务

3、查询是否锁表:

4、查询进程

以上是关于怎样查询出SQLSERVER被锁的表,以锁表的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

MySQL锁表和解锁操作

SQL:查找被锁的表,以及锁表的SQL语句(重点推荐)

SqlServer 查看被锁的表和解除被锁的表

SqlServer 查看被锁的表和解除被锁的表

如何查询db2数据库表是不是被锁

Oracle查询被锁的表及解锁方法