Linux MySQL性能如何监控
小樊
43
2025-12-25 21:01:41
Linux 上监控 MySQL 性能的实践指南
一 监控分层与核心指标
- 建议从三层入手:系统层、数据库层、应用/日志层,并围绕以下关键指标建立基线。
- 系统层
- CPU:关注 load average、用户态/系统态占比,识别计算密集或锁等待导致的占用异常。
- 内存:关注 可用内存、swap 使用,避免频繁换页影响数据库稳定。
- 磁盘 I/O:关注 await、r/s、w/s、svctm/await、%util,定位慢盘、I/O 饱和。
- 网络:关注 带宽、丢包、重传,排除网络抖动对复制/查询的影响。
- 数据库层
- 连接与线程:Threads_connected、Threads_running,识别连接风暴与线程堆积。
- 查询与慢查询:Queries、Questions、Slow_queries,配合慢查询日志定位问题 SQL。
- InnoDB 关键项:Innodb_buffer_pool_reads/reads、Innodb_buffer_pool_hit_rate(计算:1−reads/reads+read_requests)、Innodb_row_lock_time、Innodb_row_lock_waits,衡量缓存命中与锁竞争。
- 复制健康:Seconds_Behind_Master,监控主从延迟。
- 日志层
- 慢查询日志:记录 执行时间长、扫描行数多 的 SQL,用于优化。
- 错误日志:关注 崩溃、启动失败、复制中断 等关键事件。
二 快速命令行检查
- 系统资源
- 实时资源:top/htop(按 P/M 排序定位高 CPU/内存进程)、vmstat 2(整体资源与 I/O)、iostat -x 2(磁盘详细指标)。
- MySQL 即时状态
- 全局状态与变量:SHOW GLOBAL STATUS;、SHOW GLOBAL VARIABLES;。
- 当前连接与长事务:SHOW PROCESSLIST; / SHOW FULL PROCESSLIST;。
- InnoDB 细节:SHOW ENGINE INNODB STATUS\G;。
- 执行计划与诊断:EXPLAIN SELECT …;、SHOW PROFILE(注意在部分版本中已被标记为过时,优先使用 Performance Schema/慢查询分析)。
- 命令行工具
- mytop(类 top 的实时会话/查询监控)、innotop(聚焦 InnoDB 事务、锁、I/O)、mysqladmin version/status(快速健康检查)。
三 持续监控与可视化
- Prometheus + Grafana
- 部署 mysqld_exporter 采集 MySQL 指标,Prometheus 拉取,Grafana 展示与告警;可导入社区 MySQL 仪表盘模板快速落地。
- Zabbix
- 使用 Zabbix Agent 或 ODBC 监控 MySQL,应用模板、设置阈值与通知,适合已有 Zabbix 体系。
- Percona Monitoring and Management(PMM)
- 一体化监控/诊断平台,覆盖 查询分析、复制拓扑、InnoDB 指标,适合深度运维。
- 企业版与云服务
- MySQL Enterprise Monitor 提供企业级监控与诊断;云数据库通常自带监控大盘与告警通道。
四 日志与查询分析
- 慢查询日志
- 启用与配置(示例):
- slow_query_log = 1
- slow_query_log_file = /var/log/mysql/slow-query.log
- long_query_time = 2
- 使用 pt-query-digest 分析慢日志,识别 Top SQL、执行计划变化、扫描行数异常,指导索引与 SQL 重写。
- 错误日志
- 定期检查 /var/log/mysql/error.log,关注 启动失败、崩溃、复制错误 等。
五 一键巡检与优化建议
- MySQLTuner
- 快速评估配置与状态,输出 缓存命中、临时表磁盘化、连接使用 等建议,适合例行巡检与容量评估。
- Percona Toolkit
- 组合使用 pt-query-digest、pt-mysql-summary、pt-heartbeat,覆盖 SQL 分析、实例概览、复制延迟 等核心场景。