外观
MySQL 监控基线:上线前必须盯住的 8 个指标
监控的意义不是"出事才看",而是提前建立基线,异常时能对比出偏差。以下是上线前必须建立基线的 8 个指标,全部可通过 SHOW GLOBAL STATUS 或 performance_schema 直接采集。
指标清单
- QPS / TPS:
Questions与Com_commit + Com_rollback的每秒增量。基线确定后,突增 50% 以上需要关注是业务高峰还是慢查询放大。 - 连接数使用率:
Threads_connected / max_connections。持续超过 80% 说明需要扩容连接池或排查连接泄漏。 - 慢查询增长速率:
Slow_queries的每秒增量。配合long_query_time使用,速率突增时用慢查询日志聚合 Top SQL 定位。 - 缓冲池命中率:
1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests。健康值应高于 99%,低于 95% 通常意味着内存不足或冷查询过多。 - 磁盘临时表数量:
Created_tmp_disk_tables每秒增量。持续增长说明tmp_table_size/max_heap_table_size偏小或 SQL 产生了大结果集。 - 行锁等待:
Innodb_row_lock_waits与Innodb_row_lock_time_avg。平均等待超过 10ms 需要排查锁冲突事务。 - 主从延迟:
Seconds_Behind_Master。基线应接近 0,抖动时优先看从库是否在执行大事务或单线程回放瓶颈。 - 表空间与磁盘增长:
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 起步,避免一上来就用绝对值导致误报。
- 每次大促或业务变更后重新校准基线,旧基线会随业务规模失效。