MySQL 查询性能监控与分析 完整版

一、开启核心监控日志

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 语句;

重点字段解读

  1. type :访问类型(最优→最差) system > const > eq_ref > ref > range > index > ALL 严禁出现 ALL 全表扫描
  2. key:实际使用的索引,NULL=没走索引
  3. rows:预估扫描行数,越小越快
  4. 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;

快速定位死锁、行锁等待、长事务阻塞

六、可视化监控平台(生产必备)

  1. MySQL Workbench:自带性能仪表盘、慢查询视图
  2. Navicat/DBeaver:可视化执行计划、状态监控
  3. Prometheus + Grafana:搭建大屏监控 监控指标:QPS、TPS、连接数、慢查询、缓冲池命中率、锁等待
  4. 阿里云/腾讯云数据库监控:云端一键查看性能趋势

七、日常监控核心指标

  1. QPS/TPS:每秒查询、事务量
  2. 连接数:最大连接、空闲连接、活跃连接
  3. 慢SQL数量:每日增长趋势
  4. 索引命中率
  5. InnoDB 缓冲池命中率(越高越好)
  6. 锁等待时长、死锁次数
  7. 磁盘IO、CPU、内存使用率

八、标准排查流程

  1. 看监控:CPU/IO飙升 → 确定数据库瓶颈
  2. 查慢日志:抓取耗时最长SQL
  3. explain 分析:确认是否走索引
  4. 查看进程:是否存在长事务、死锁
  5. 优化SQL/加索引/改表结构
  6. 复测性能,对比优化前后耗时
相关推荐
努力成为DBA的小王1 小时前
MySQL数据类型
数据库·mysql
埃伊蟹黄面1 小时前
MySQL 库的操作
数据库·mysql
【心态好不摆烂】2 小时前
MySQL——表的约束(上)
数据库·mysql
fengxin_rou2 小时前
数据库三大范式深度详解:数据表设计规范化实战指南
数据库·mysql·范式
Java成神之路-2 小时前
面试题:如何利用联合索引提升性能?
mysql
Java成神之路-3 小时前
面试题:联合索引的结构
mysql
摇滚侠3 小时前
MySQL 面试题 真正的 offer 偏方 Java 基础 Java 高级
java·数据库·mysql
码上有光3 小时前
MySQL的基础操作——约束(上)——期末快速复习
数据库·mysql·期末复习
無限進步D3 小时前
MySQL 运算符
数据库·mysql