mysql 常用语句 Lock wait timeout exceeded;
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
-- 查看线程创建的情况
`
SHOW STATUS LIKE 'Threads%';
-- 查看哪些事务耗时
SELECT
trx_id,
trx_state,
trx_started,
TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS duration_sec,
trx_rows_modified,
trx_query
FROM information_schema.INNODB_TRX
WHERE TIMESTAMPDIFF(SECOND, trx_started, NOW()) > 30; -- 查询超过60秒的事务
SELECT
trx_id,
trx_state,
trx_started,
trx_mysql_thread_id AS thread_id,
trx_query AS query
FROM information_schema.INNODB_TRX;
查看指定终端的连接数
SELECT *
FROM INFORMATION_SCHEMA.PROCESSLIST where DB='zx_wms'
一、查询缓存(Query Cache)使用情况
查询缓存会存储 SELECT 语句的结果,当相同查询再次执行时直接返回缓存结果,无需重新执行。
- 检查查询缓存是否启用
sql
SHOW VARIABLES LIKE 'have_query_cache'; -- 应显示 YES
SHOW VARIABLES LIKE 'query_cache_type'; -- ON 表示启用,DEMAND 表示按需启用
SHOW VARIABLES LIKE 'query_cache_size'; -- 缓存总大小(字节) - 查看缓存状态指标
sql
SHOW STATUS LIKE 'Qcache%';
关键指标:
Qcache_hits:缓存命中次数(直接使用缓存结果的查询数)。
Qcache_inserts:缓存插入次数(新查询结果被加入缓存的次数)。
Qcache_not_cached:未被缓存的查询数(如包含不确定函数、子查询的查询)。
Qcache_queries_in_cache:当前缓存中存储的查询数量。
Qcache_free_memory:缓存剩余空闲内存(字节)。
3. 计算缓存命中率
sql
SELECT
(Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100 AS hit_rate_percentage
FROM information_schema.GLOBAL_STATUS;
理想命中率:通常建议达到 80% 以上,若过低可能需要优化查询或调整缓存配置。
-
错误:"MySQL server has gone away"
当应用程序长时间空闲后,再次执行 SQL 时可能报错。这是因为连接已被 MySQL 关闭,但应用程序仍在使用它。
解决方法:
缩短 wait_timeout(如 1800 秒),并在应用程序中实现连接池的健康检查。
使用连接池的 testOnBorrow 或 keepAlive 功能,定期验证连接有效性。 -
高并发场景下的连接资源浪费
过长的 wait_timeout 会导致大量空闲连接占用内存,影响性能。
优化建议:
将 wait_timeout 设置为合理值(如 300-1800 秒),平衡资源利用和应用稳定性。
监控 Threads_connected 状态变量,确保连接数在合理范围:
sql
SHOW GLOBAL STATUS LIKE 'Threads_connected'; -
与应用程序的连接池配合
应用程序(如 Java 的 HikariCP、Python 的 SQLAlchemy)通常有自己的连接池配置,需与 wait_timeout 协调:
连接池的 maxIdleTime 应小于 wait_timeout,避免连接被 MySQL 提前关闭。
开启连接池的 connectionTestQuery(如 SELECT 1),定期检查连接有效性。
七、监控与验证 -
查看当前空闲连接数
sql
SHOW PROCESSLIST;
检查状态为 Sleep 的连接数量,过多可能表示 wait_timeout 过长。 -
统计连接超时关闭次数
sql
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
SHOW GLOBAL STATUS LIKE 'Aborted_clients';
Aborted_clients 增加可能表示 wait_timeout 过短或应用程序未正确关闭连接。
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。