MySQL存在"失效事务锁"需清理,因其innodb_lock_wait_timeout仅控制锁等待超时,不清理已卡死却未提交/回滚的悬挂事务,后者会长期持锁阻塞DML。MySQL 为什么会有"失效事务锁"需要清理MySQL 的 innodb_lock_wait_timeout 只控制等待锁的超时,不负责清理已卡死但未提交/回滚的事务。这类事务可能因应用崩溃、网络中断或程序逻辑 bug 导致长期持有锁却不释放,形成"悬挂事务"(zombie transaction),进而阻塞后续 DML。InnoDB 本身不会自动 kill 它们------得靠外部干预。查出正在运行却疑似失效的事务关键不是看"时间长",而是看"没进展还占着锁"。用以下查询定位:SELECT trx_id, trx_mysql_thread_id AS thread_id, trx_started, TIMEDIFF(NOW(), trx_started) AS duration, trx_state, trx_queryFROM information_schema.INNODB_TRX WHERE trx_state = 'RUNNING' AND TIMEDIFF(NOW(), trx_started) > '00:10:00' AND trx_started < NOW() - INTERVAL 10 MINUTE;注意点:trx_state = 'RUNNING' 不代表健康------它可能是 sleep 状态下拿着锁不动,比如应用开了事务但忘了 commit别只依赖 trx_started 时间阈值,要结合业务场景判断:你的正常事务通常几秒?超过 2 分钟就值得怀疑trx_query 为空常见于空事务(BEGIN 后无操作),这种最危险:占锁、不干活、难察觉用 SQL + 定时任务安全 kill 悬挂事务不能直接在定时脚本里写 KILL,必须先确认、再执行、留日志。推荐用存储过程封装判断逻辑:DELIMITER $$CREATE PROCEDURE cleanup_zombie_trx()BEGIN DECLARE done INT DEFAULT FALSE; DECLARE v_trx_id VARCHAR(18); DECLARE v_thread_id BIGINT; DECLARE cur CURSOR FOR SELECT trx_id, trx_mysql_thread_id FROM information_schema.INNODB_TRX WHERE trx_state = 'RUNNING' AND trx_started < NOW() - INTERVAL 5 MINUTE AND (trx_query IS NULL OR trx_query = ''); DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;<p>OPEN cur;read_loop: LOOPFETCH cur INTO v_trx_id, v_thread_id;IF done THENLEAVE read_loop;END IF;INSERT INTO cleanup_log VALUES (NOW(), v_thread_id, v_trx_id, 'killed');KILL v_thread_id;END LOOP;CLOSE cur;END$$DELIMITER ;调用方式:CALL cleanup_zombie_trx(); There's An AI For That 全球领先的 AI 聚合器,收集10,225个AI工具,可用于超过2,548个任务。
相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|骆驼纳米抗体:从原核表达、高通量测序到分子对接全流程实现阿正的梦工坊1 小时前
深入理解 PyTorch 中的 unsqueeze 操作FreakStudio1 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显测试员周周3 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战2301_783848654 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南TE-茶叶蛋4 小时前
DBeaver 的Explain 执行计划,分析sql的性能CLX05054 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署m0_617493945 小时前
PySide6 网络请求深度实测:从基础 API 调用到数据解析实战指南知识汲取者5 小时前
每日一篇高频面试题系列之【MySQL 锁】老纪5 小时前
SQL中如何查找特定的空值行:WHERE IS NULL深度解析