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. 复测性能,对比优化前后耗时
相关推荐
高级程序源3 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
KIDULT°4 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
牛战士coding5 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
我不会插花弄玉6 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql
SL_staff9 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
加油yx9 小时前
MySQL数据类型
数据库·mysql
夜雪一千10 小时前
MySQL 数据加密实战:从传输、存储到字段级加密,分清场景不踩坑
数据库·mysql
高级程序源12 小时前
SSM仓储管理系统31582-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·flask·课程设计
PC2005-cloud13 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
太理摆烂哥13 小时前
MySQL数据库基础
数据库·mysql