惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
J
Java Code Geeks
博客园 - 聂微东
B
Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
腾讯CDC
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
美团技术团队
博客园 - Franky
Google DeepMind News
Google DeepMind News
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
The Cloudflare Blog

博客园 - 温柔的风

宝塔面板定时任务目录清理日志-定时检测阈值清理 Mysql8 允许远程登录 【uni-app】申请高德地图key,封装map.js,实现H5、iOS、Android通过getlocation获取地图定位信息(摘) centos安装atop工具,检测服务器情况 webman 安装gateway实现socket https站点websocket连接失败问题 layui table 表格过滤tableFilter 谷歌浏览器无法播放音频mp3怎么办? uniapp下实现心跳检测服务端并且结合生命周期自动再次连接绑定客户端 git push Git远端意外挂断 php对接阿里通义AI模型,简单实现浏览器端以sse方式输出 Layer.js最大化最小化监听 Linux磁盘阈值及内存阈值检测脚本 fastadmin控制列显示与隐藏 基于uniapp的全局监听websocket连接及接收服务端消息 fastadmin自定义主题并随切换变更iframe颜色 fastadmin-PHP-导出少量数据PhpOffice以及百万级别数据csv压缩 Macbook M1下安装Kibana Macbook M1下安装elasticsearch Fastadmin表格的列头对齐以及内容对齐设定方式
mysql 8.0查看正在执行的事务锁
温柔的风 · 2025-09-17 · via 博客园 - 温柔的风
SELECT * FROM performance_schema.data_lock_waits;
-- MySQL 8.0+
SELECT
r.trx_id AS waiting_trx_id,
r.trx_mysql_thread_id AS waiting_thread,
r.trx_query AS waiting_query,
b.trx_id AS blocking_trx_id,
b.trx_mysql_thread_id AS blocking_thread,
b.trx_query AS blocking_query
FROM performance_schema.data_lock_waits w
INNER JOIN information_schema.INNODB_TRX b
ON b.trx_id = w.BLOCKING_ENGINE_TRANSACTION_ID
INNER JOIN information_schema.INNODB_TRX r
ON r.trx_id = w.REQUESTING_ENGINE_TRANSACTION_ID;

一、查看等待锁情况

image

二、终止阻塞者
找到 blocking_thread(如 1000),执行

waiting_trx_idwaiting_threadwaiting_queryblocking_trx_idblocking_threadblocking_query
12345 1001 UPDATE ... 12344 1000 SELECT ... FOR UPDATE

三、终止等待者(不推荐,除非必要)
如果某个等待事务本身有问题(如应用卡死),也可以终止它:

⚠️ 注意:这只会终止等待者,阻塞者仍然存在,其他事务仍可能被阻塞。

四、其他辅助命令

SHOW PROCESSLIST;
-- 或
SELECT * FROM information_schema.PROCESSLIST;

关注:

  • State: 是否为 LockedWaiting for ...
  • Time: 执行时间过长的连接

杀死所有睡眠连接(可选)

-- 脚本方式生成 KILL 命令
SELECT CONCAT('KILL ', id, ';') 
FROM information_schema.PROCESSLIST 
WHERE Command = 'Sleep' AND Time > 60;

自动化脚本示例(紧急处理)

-- 一键终止所有阻塞者(谨慎使用!)
SELECT CONCAT('KILL ', blocking_thread, ';') 
FROM (
    SELECT b.trx_mysql_thread_id AS blocking_thread
    FROM performance_schema.data_lock_waits w
    INNER JOIN information_schema.INNODB_TRX b 
        ON b.trx_id = w.BLOCKING_ENGINE_TRANSACTION_ID
) t;

简单的步骤:

复现时可以看下show full processlist看下请求,执行这几个SQL看下锁情况

查询 正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX

查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

找到后评估是否可以kill +sql id