{{ item.name }}
{{ item.name }}

{{ it.name }}

{{ it.text }}

{{ it.name }}

{{ innerIt.name }}

{{ innerIt.text }}

{{news.time}}
{{news.title}}
怎么找到上锁的 SQL 语句
2022-04-26发布 36,965浏览

问题

有的时候 SQL 语句被锁住了,可是通过 show processlist 找不到加锁的的 SQL 语句,这个时候应该怎么排查呢

前提

image

实验

1、建一个表,插入三条数据

image

image

2、开启一个事务,删除掉一行记录,但不提交

image

3、另开启一个事务,更新这条语句,会被锁住

image

4、通过 show processlist 只能看到一条正在执行的 SQL 语句

image

5、接下来就是我们知道的,通过 information_schema 库里的 INNODB_TRX、INNODB_LOCKS 、INNODB_LOCK_WAITS 获得的一个锁信息

image

image

6、从上面可以看出来是 thread_id 为 22188 的执行的 SQL 语句锁住了后面的更新操作,但是我们从上文中 show processlist 中并未看到这条事务,测试环境我们可以直接 kill 掉对应的线程号,但如果是生产环境中,我们需要找到对应的 SQL 语句,根据相应的语句再考虑接下来应该怎么处理

7、需要结合 performance_schema.threads 找到对应的事务号

image

image

image

8、找到事务号,可以从 events_statements_current 找到对应的 SQL 语句:SQL_TEXT

image

image

image

image

image

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


上一篇
MySQL 的 TIMESTAMP 类型字段非空和默认值属性的影响
400-820-6580 13916131869
marketing@actionsky.com
上海市闵行区万源路2138号泓茂中心2号楼
产品详情
关系型数据库
AI数据库
数据库智能管理平台
数据库生态产品
行业案例
金融行业
新零售行业
制造业
通信行业
更多
公司动态
最新新闻
国产化信息
技术分享
关于我们
公司简介
公司分布
国家专利
资质认证
扫码关注公众号
© Copyright 2017, All rights reserved by: 上海爱可生信息技术股份有限公司 沪ICP备12003970号-1 | 法律声明 | 网站地图
沪公网安备 31010402003331号