一、开启核心监控日志
1. 慢查询日志(最核心)
配置 my.cnf / my.ini
ini
slow_query_log = 1 # 开启
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 超过1秒判定慢SQL
log_queries_not_using_indexes = 1 # 记录无索引SQL
min_examined_row_limit = 100 # 扫描行数大于100才记录
重启生效,自动抓取低效SQL。
2. 通用日志、错误日志
- general_log:记录所有执行SQL(调试用,线上关闭)
- error_log:排查崩溃、启动异常、死锁
二、实时状态监控(命令行)
1. 查看当前连接与运行SQL
sql
-- 查看所有进程
show processlist;
show full processlist;
-- 杀掉慢查询进程
kill 进程ID;
2. 服务器全局状态
sql
show status like 'Com%'; -- 增删改查执行次数
show status like 'Connections';-- 连接数
show status like 'Slow_queries';-- 慢查询总数
show status like 'Innodb%'; -- InnoDB引擎状态
3. 索引使用监控
sql
-- 查看未使用索引、索引使用率
SELECT * FROM sys.schema_unused_indexes;
三、慢日志分析工具
1. mysqldumpslow(自带)
bash
# 查耗时最多慢SQL
mysqldumpslow -s t slow.log
# 查访问次数最多
mysqldumpslow -s c slow.log
# 只看SELECT语句
mysqldumpslow -g 'select' slow.log
2. pt-query-digest(percona 强力分析)
解析慢日志,自动排序、统计、优化建议,线上主流分析工具。
四、SQL执行计划分析(定位根源)
sql
EXPLAIN SELECT 语句;
重点字段解读
- type :访问类型(最优→最差)
system > const > eq_ref > ref > range > index > ALL严禁出现 ALL 全表扫描 - key:实际使用的索引,NULL=没走索引
- rows:预估扫描行数,越小越快
- Extra 危险标识
Using filesort:文件排序,需优化排序字段索引Using temporary:创建临时表,分组/联表低效Using index:覆盖索引,性能优秀
五、事务与锁监控(卡顿高发原因)
sql
-- 查看当前事务
SELECT * FROM information_schema.innodb_trx;
-- 查看锁等待
SELECT * FROM information_schema.innodb_locks;
SELECT * FROM information_schema.innodb_lock_waits;
快速定位死锁、行锁等待、长事务阻塞。
六、可视化监控平台(生产必备)
- MySQL Workbench:自带性能仪表盘、慢查询视图
- Navicat/DBeaver:可视化执行计划、状态监控
- Prometheus + Grafana:搭建大屏监控 监控指标:QPS、TPS、连接数、慢查询、缓冲池命中率、锁等待
- 阿里云/腾讯云数据库监控:云端一键查看性能趋势
七、日常监控核心指标
- QPS/TPS:每秒查询、事务量
- 连接数:最大连接、空闲连接、活跃连接
- 慢SQL数量:每日增长趋势
- 索引命中率
- InnoDB 缓冲池命中率(越高越好)
- 锁等待时长、死锁次数
- 磁盘IO、CPU、内存使用率
八、标准排查流程
- 看监控:CPU/IO飙升 → 确定数据库瓶颈
- 查慢日志:抓取耗时最长SQL
- explain 分析:确认是否走索引
- 查看进程:是否存在长事务、死锁
- 优化SQL/加索引/改表结构
- 复测性能,对比优化前后耗时