Skip to content

MySQL 级别指标

连接指标

1. Connections

描述

  • 服务器启动以来尝试连接到MySQL服务器的连接尝试次数
  • 包括成功和失败的连接尝试

监控意义

  • 了解数据库的连接负载
  • 识别连接风暴
  • 评估连接池配置是否合理

版本差异

  • 在所有MySQL版本中都可用
  • 指标计算方式一致

2. Threads_connected

描述

  • 当前打开的连接数
  • 包括活跃和空闲连接

监控意义

  • 实时了解数据库连接使用情况
  • 确保不超过max_connections限制
  • 识别连接泄漏

正常范围

  • 通常应低于max_connections的80%
  • 根据应用程序需求调整

版本差异

  • 在所有MySQL版本中都可用

3. Threads_running

描述

  • 当前正在执行查询的连接数
  • 反映数据库的实时负载

监控意义

  • 了解数据库的实际工作负载
  • 识别查询风暴
  • 评估CPU资源使用情况

正常范围

  • 通常应低于CPU核心数的2倍
  • 根据服务器配置和应用需求调整

版本差异

  • 在所有MySQL版本中都可用

查询性能指标

1. Queries

描述

  • 服务器启动以来执行的所有查询次数
  • 包括SELECT、INSERT、UPDATE、DELETE等

监控意义

  • 了解数据库的总体查询负载
  • 评估数据库的工作强度
  • 比较不同时间段的查询量变化

版本差异

  • 在所有MySQL版本中都可用

2. Questions

描述

  • 服务器启动以来客户端发送的查询次数
  • 不包括存储过程中的内部查询

监控意义

  • 了解客户端实际发起的查询量
  • 评估应用程序的查询模式

与Queries的区别

  • Questions只计算客户端发起的查询
  • Queries包括存储过程中的所有查询

版本差异

  • 在所有MySQL版本中都可用

3. Slow_queries

描述

  • 服务器启动以来执行时间超过long_query_time的查询次数

监控意义

  • 识别需要优化的慢查询
  • 评估数据库性能状况
  • 了解应用程序的查询质量

监控建议

  • 设置合理的long_query_time阈值(建议1-2秒)
  • 定期分析慢查询日志
  • 优化频繁出现的慢查询

版本差异

  • 在所有MySQL版本中都可用
  • MySQL 5.6 引入了performance_schema,可以更细粒度地监控慢查询

InnoDB缓冲池指标

1. Innodb_buffer_pool_read_requests

描述

  • 从InnoDB缓冲池中读取数据的请求次数
  • 包括逻辑读

监控意义

  • 了解缓冲池的使用频率
  • 评估缓冲池大小是否合适

版本差异

  • 在MySQL 5.5及以上版本中可用

2. Innodb_buffer_pool_reads

描述

  • 从磁盘读取数据的请求次数
  • 包括物理读

监控意义

  • 了解缓冲池的命中率
  • 评估缓冲池大小是否足够
  • 识别需要优化的查询

计算缓冲池命中率

缓冲池命中率 = (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%

正常范围

  • 理想情况下应高于99%
  • 低于98%可能需要增加缓冲池大小

版本差异

  • 在MySQL 5.5及以上版本中可用

3. Innodb_buffer_pool_pages_data

描述

  • 缓冲池中包含数据的页数
  • 不包括索引页

监控意义

  • 了解缓冲池数据页的使用情况
  • 评估缓冲池大小是否合适

计算数据页使用率

数据页使用率 = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%

版本差异

  • 在MySQL 5.5及以上版本中可用

锁指标

1. Innodb_row_lock_waits

描述

  • 发生行锁等待的次数

监控意义

  • 了解数据库中的锁竞争情况
  • 识别锁等待热点
  • 优化存在锁竞争的查询

版本差异

  • 在MySQL 5.5及以上版本中可用

2. Innodb_deadlocks

描述

  • 服务器启动以来发生的死锁次数

监控意义

  • 识别数据库中的死锁情况
  • 分析死锁原因并优化
  • 确保应用程序的并发设计合理

处理方法

  • 查看InnoDB死锁日志:SHOW ENGINE INNODB STATUS\G
  • 优化事务逻辑,确保以相同顺序访问资源
  • 减少事务持有锁的时间

版本差异

  • 在MySQL 5.5及以上版本中可用

复制指标

1. Slave_IO_Running

描述

  • 从库IO线程的运行状态
  • YES表示正常运行,NO表示停止

监控意义

  • 了解从库IO线程是否正常
  • 识别复制连接问题

版本差异

  • 在所有MySQL版本中都可用

2. Slave_SQL_Running

描述

  • 从库SQL线程的运行状态
  • YES表示正常运行,NO表示停止

监控意义

  • 了解从库SQL线程是否正常
  • 识别复制执行问题

版本差异

  • 在所有MySQL版本中都可用

3. Seconds_Behind_Master

描述

  • 从库落后主库的秒数
  • 反映复制延迟情况

监控意义

  • 了解复制延迟程度
  • 识别复制性能问题
  • 确保数据一致性

正常范围

  • 理想情况下应小于1秒
  • 超过30秒可能需要优化

版本差异

  • 在所有MySQL版本中都可用
  • MySQL 8.0 引入了更精确的复制延迟计算

常见问题(FAQ)

Q1: 哪些MySQL指标最值得监控?

A1: 最值得监控的MySQL指标包括:

  • 连接指标:Threads_connected、Threads_running
  • 查询指标:Queries、Slow_queries
  • 缓冲池指标:Innodb_buffer_pool_reads、Innodb_buffer_pool_read_requests
  • 锁指标:Innodb_row_lock_waits、Innodb_deadlocks
  • 复制指标:Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master

Q2: 如何监控MySQL指标?

A2: 监控MySQL指标的方法:

  • 使用MySQL内置的SHOW STATUS命令
  • 查询information_schema和performance_schema
  • 使用监控工具(如Prometheus+Grafana、Zabbix、PMM)
  • 编写自定义脚本定期收集指标

Q3: 如何设置合理的监控阈值?

A3: 设置监控阈值的建议:

  • 根据历史数据和业务需求确定
  • 考虑服务器硬件配置
  • 遵循80%原则(如连接数不超过max_connections的80%)
  • 定期调整阈值以适应业务变化

Q4: 如何使用performance_schema监控更细粒度的指标?

A4: 使用performance_schema监控的方法:

  • 确保performance_schema已启用:SHOW VARIABLES LIKE 'performance_schema';
  • 查询相关性能视图,如events_statements_summary_by_digest
  • 分析查询执行细节和资源消耗
  • 识别性能瓶颈

Q5: 不同MySQL版本的指标有什么差异?

A5: 不同MySQL版本指标的主要差异:

  • MySQL 5.5 引入了更多InnoDB指标
  • MySQL 5.6 引入了performance_schema
  • MySQL 5.7 增强了performance_schema和sys schema
  • MySQL 8.0 进一步优化了指标收集和计算

Q6: 如何优化基于指标的性能问题?

A6: 基于指标优化性能的步骤:

  1. 识别异常指标
  2. 分析指标异常的原因
  3. 制定优化方案
  4. 实施优化
  5. 验证优化效果

Q7: 如何监控MySQL的资源使用情况?

A7: 监控MySQL资源使用的方法:

  • 使用操作系统工具(top、iostat、vmstat)监控CPU、内存、I/O
  • 使用MySQL内置指标监控连接、查询、缓冲池等
  • 使用专用监控工具提供的资源视图

Q8: 如何设置告警规则?

A8: 设置告警规则的建议:

  • 基于关键指标设置告警
  • 分级告警(警告、严重、紧急)
  • 考虑告警频率和持续时间
  • 设置合理的告警阈值
  • 测试告警规则的有效性