如何应对MySQL锁表引发业务崩溃,构建自动监控与告警脚本?
- 内容介绍
- 文章标签
- 相关推荐
本文共计855个文字,预计阅读时间需要4分钟。
MySQL中的表锁并非等它自己好,而是必须预先在30秒内定位并处理,否则业务请求会堆积、连接池耗尽、上游服务超时崩溃。
怎么快速识别当前是否有线程卡在 Locked 状态
直接执行 show processlist 会返回大量无关连接,真正要盯的是状态为 Locked、Waiting for table metadata lock 或运行时间远超正常值(比如 >60s)的行。
- 用
mysql -uroot -e "show processlist" | grep -E "(Locked|Waiting.*metadata|Sleep)"快速过滤 - 注意区分:状态是
Sleep但Time列数值极大(如 1200),大概率是事务没提交,也得杀 -
information_schema.processlist视图更稳定,适合脚本调用,比如:SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE state REGEXP 'Locked|Waiting' OR time > 60
kill 命令不能乱发,得先确认是否安全
盲目 kill 可能导致事务回滚压力陡增、binlog位置错乱,甚至主从延迟突增。
本文共计855个文字,预计阅读时间需要4分钟。
MySQL中的表锁并非等它自己好,而是必须预先在30秒内定位并处理,否则业务请求会堆积、连接池耗尽、上游服务超时崩溃。
怎么快速识别当前是否有线程卡在 Locked 状态
直接执行 show processlist 会返回大量无关连接,真正要盯的是状态为 Locked、Waiting for table metadata lock 或运行时间远超正常值(比如 >60s)的行。
- 用
mysql -uroot -e "show processlist" | grep -E "(Locked|Waiting.*metadata|Sleep)"快速过滤 - 注意区分:状态是
Sleep但Time列数值极大(如 1200),大概率是事务没提交,也得杀 -
information_schema.processlist视图更稳定,适合脚本调用,比如:SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE state REGEXP 'Locked|Waiting' OR time > 60
kill 命令不能乱发,得先确认是否安全
盲目 kill 可能导致事务回滚压力陡增、binlog位置错乱,甚至主从延迟突增。

