"凌晨3点,值班手机突然狂震——线上订单系统响应速度暴跌!登录服务器一看,CPU直接飙到95%...作为DBA的你该怎么办?" 这种惊心动魄的场景,每个数据库管理员都可能遇到,今天我们就来彻底掌握MySQL进程监控与管理的必备技能,让你下次遇到问题时能淡定处理!💪
SHOW PROCESSLIST;
这是最基础的命令,会返回:
实用技巧:加上\G
垂直显示更清晰:
SHOW FULL PROCESSLIST\G
SELECT * FROM performance_schema.threads; SELECT * FROM information_schema.PROCESSLIST;
这两个系统视图能提供更详细的信息,包括:
-- 按执行时间排序 SELECT * FROM information_schema.PROCESSLIST ORDER BY TIME DESC LIMIT 10; -- 查找锁等待 SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND = 'Query' AND STATE LIKE '%lock%';
-- CPU消耗TOP5 SELECT ps_thread_id, processlist_user, processlist_host, processlist_time, processlist_info FROM performance_schema.threads JOIN information_schema.PROCESSLIST ON threads.processlist_id = PROCESSLIST.ID ORDER BY THREAD_OS_PRIORITY DESC LIMIT 5;
KILL [CONNECTION|QUERY] process_id;
KILL CONNECTION
:终止整个连接KILL QUERY
:仅终止当前查询最佳实践:先尝试QUERY方式,避免直接断开业务连接
-- 自动生成KILL语句(执行时间>300秒的进程) SELECT CONCAT('KILL ',id,';') FROM information_schema.PROCESSLIST WHERE TIME > 300 AND USER NOT IN ('system user','repl');
#!/bin/bash # 监控长时间运行的查询 mysql -e "SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, LEFT(INFO,50) FROM information_schema.PROCESSLIST WHERE TIME > 60 ORDER BY TIME DESC" > /tmp/long_queries.log
建议设置监控报警阈值:
ANALYZE TABLE
更新统计信息wait_timeout
和max_connections
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;
掌握这些MySQL进程监控与管理技巧后,下次再遇到数据库"发脾气"时,你就能像老中医一样——望(监控)、闻(分析)、问(排查)、切(处理)一气呵成!好的DBA不是等出了问题才解决,而是通过持续监控把问题扼杀在萌芽中,现在就去检查你的数据库进程吧!🔧
本文方法基于MySQL 8.0版本验证,适用大多数生产环境,特殊场景可能需要调整参数或使用专业监控工具。
本文由 汉鸿才 于2025-07-31发表在【云服务器提供商】,文中图片由(汉鸿才)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/498119.html
发表评论