怎么能查到造成锁等待的SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么能查到造成锁等待的SQL语句相关的知识,希望对你有一定的参考价值。

参考技术A sql server:
Select * from sysprocesses where blocked<>0
--找到SPID
exec sp_lock
--根据SPID找到OBJID
select object_name(85575343)
--根据OBJID找到表名

Oracle:
SELECT P.SPID,
A.SERIAL#,
C.OBJECT_NAME,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME
FROM V$PROCESS P,
V$SESSION A,
V$LOCKED_OBJECT B,
ALL_OBJECTS C
WHERE P.ADDR = A.PADDR
AND A.PROCESS = B.PROCESS
AND C.OBJECT_ID = B.OBJECT_ID;本回答被提问者采纳
参考技术B 找到事务号,可以从 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每天产生了多大容量的binlog,用SQL语句能查到吗?

MySQL每天产生了多大容量的binlog,用SQL语句能查到吗?


首先,这是个假设性命题(又一个钓鱼题)。
这个需求完全可以通过系统层命令,配合MySQL中的“FLUSH BINARY LOGS”快速完成。
运行SHOW MASTER/BINARY LOGS命令能查看全部binlog列表,但没办法区别哪些是当天内生成的。

 

以上是关于怎么能查到造成锁等待的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

MySQL每天产生了多大容量的binlog,用SQL语句能查到吗?

SQL查访问日志 能查到那个表的访问操作

一个事务中先插入数据,然后再查询所有数据,能查到刚才的记录吗

SQL如何将一个数据库中查到的结果加入到另一个数据库?

如何查询oracle数据库的操作记录?

Sql Server 优化----SQL语句的执行方式与锁以及阻塞的关系