MySQL 监控需要了解哪些方面的知识
快猫运营团队
2025-02-13 16:02:36
MySQL 监控主要分几个方面:
- MySQL 进程本身的存活性
- MySQL 的运行日志、慢日志
- MySQL 暴露的性能指标
使用 MySQL 内置工具
MySQL 提供了一些内置的工具和命令,可以帮助你监控数据库的状态。
SHOW STATUS
SHOW STATUS
命令可以查看 MySQL 服务器的性能指标,比如连接数、查询数、缓存命中率、InnoDB引擎的各类指标等。
SHOW GLOBAL STATUS;
通过分析这些状态变量,可以了解数据库的运行状况。另外,MySQL 还提供了 SHOW VARIABLES
命令,可以查看 MySQL 服务器的配置参数。有时会在配置参数和状态变量之间找到一些关联。比如连接数过多,可能是 max_connections
参数设置过小。
SHOW PROCESSLIST
SHOW PROCESSLIST
可以查看当前正在执行的查询和连接信息,帮助识别慢查询或阻塞问题。
SHOW PROCESSLIST;
比如某个 SQL 执行的很慢,通过 SHOW PROCESSLIST
就可以看到这个查询的状态。
Performance Schema
MySQL 的 Performance Schema 提供了详细的性能监控数据,比如我们经常使用如下的一些查询:
哪类SQL执行最多
SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY COUNT_STAR DESC limit 10;
哪类SQL的平均响应时间最多
SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY AVG_TIMER_WAIT DESC limit 10;
哪个表物理IO最多
SELECT
file_name,
event_name,
SUM_NUMBER_OF_BYTES_READ,
SUM_NUMBER_OF_BYTES_WRITE
FROM file_summary_by_instance
ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC LIMIT 10\G
慢查询日志(Slow Query Log)
启用慢查询日志可以记录执行时间超过指定阈值的查询,帮助定位性能瓶颈。
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 记录超过 2 秒的查询
使用监控工具
除了 MySQL 自带的工具,许多开源监控工具可以更直观地监控 MySQL 的性能和状态。
- Prometheus + MySQL Exporter:Prometheus 是一款开源的监控系统,MySQL Exporter 可以将 MySQL 的性能指标暴露给 Prometheus,通过 Grafana 展示监控数据。
- Zabbix:Zabbix 是一款功能强大的监控系统,支持 MySQL 的监控。不过老版本的 Zabbix 对 MySQL 的监控就是靠一批命令脚本着实不太优雅,Zabbix agent2 倒是好多了。
- Nightingale + Categraf:Nightingale 是一款开源的监控系统,Categraf 是 Nightingale 的采集器,支持 MySQL 的监控。Categraf 的 MySQL 监控插件除了可以采集 MySQL 基础指标,还可以自定义 SQL 语句采集业务指标。
MySQL 监控的关键指标
在监控 MySQL 时,需要关注以下关键指标:
连接相关
- 连接数(Connections):当前连接数和最大连接数,以及 abort 的连接数。
查询性能
- 查询速率(Queries Per Second, QPS):每秒执行的查询数。
- 慢查询数(Slow Queries):执行时间超过阈值的查询数。
缓存性能
- InnoDB 缓冲池命中率(InnoDB Buffer Pool Hit Rate):InnoDB 缓冲池的命中率。
锁和等待
- 锁等待时间(Lock Wait Time):锁等待的时间。
- 死锁数(Deadlocks):发生的死锁次数。
资源使用
- CPU 和内存使用率:MySQL 进程的 CPU 和内存占用。
- 磁盘 I/O:读写操作的性能,这个尤为关键。
复制状态
- 主从复制延迟(Replication Delay):主从复制的延迟时间。
总结
MySQL 是非常常用的一款数据库,如何监控 MySQL,是广大运维、DBA非常关心的问题。通过 MySQL 自带的工具和开源监控工具,可以更直观地监控 MySQL 的性能和状态,及时发现问题,提高数据库的稳定性和性能。