跳到主内容

MySQL 监控基线:上线前必须盯住的 8 个指标 ​

监控的意义不是"出事才看",而是提前建立基线,异常时能对比出偏差。以下是上线前必须建立基线的 8 个指标,全部可通过 SHOW GLOBAL STATUS 或 performance_schema 直接采集。

指标清单 ​

  1. QPS / TPS:Questions 与 Com_commit + Com_rollback 的每秒增量。基线确定后,突增 50% 以上需要关注是业务高峰还是慢查询放大。
  2. 连接数使用率:Threads_connected / max_connections。持续超过 80% 说明需要扩容连接池或排查连接泄漏。
  3. 慢查询增长速率:Slow_queries 的每秒增量。配合 long_query_time 使用,速率突增时用慢查询日志聚合 Top SQL 定位。
  4. 缓冲池命中率:1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests。健康值应高于 99%,低于 95% 通常意味着内存不足或冷查询过多。
  5. 磁盘临时表数量:Created_tmp_disk_tables 每秒增量。持续增长说明 tmp_table_size / max_heap_table_size 偏小或 SQL 产生了大结果集。
  6. 行锁等待:Innodb_row_lock_waits 与 Innodb_row_lock_time_avg。平均等待超过 10ms 需要排查锁冲突事务。
  7. 主从延迟:Seconds_Behind_Master。基线应接近 0,抖动时优先看从库是否在执行大事务或单线程回放瓶颈。
  8. 表空间与磁盘增长:information_schema.TABLES 聚合数据文件大小。预留 30% 磁盘水位,避免写满导致实例只读。

采集示例 ​

sql
-- 关键状态指标一次性采集
SHOW GLOBAL STATUS WHERE Variable_name IN (
  'Questions', 'Threads_connected', 'Slow_queries',
  'Innodb_buffer_pool_reads', 'Innodb_buffer_pool_read_requests',
  'Created_tmp_disk_tables', 'Innodb_row_lock_waits'
);

-- 主从延迟(在从库执行)
SHOW SLAVE STATUS\G

基线建立方法 ​

  • 每 30 秒采集一次上述指标,连续观察一周,取 P95 作为基线。
  • 告警阈值 = 基线 × 1.5 起步,避免一上来就用绝对值导致误报。
  • 每次大促或业务变更后重新校准基线,旧基线会随业务规模失效。