告警多本质是底层问题批量暴露,如索引缺失、配置不当、架构瓶颈或设计缺陷;重复同类告警预示系统性风险,需根因治理而非临时处置。

不是告警多才危险,而是告警多说明底层问题正在批量暴露
告警背后往往是资源瓶颈或设计缺陷在“连环触发”
比如 seq_scan 告警集中爆发(如 GaussDB 中扫描率 100% 的表扎堆出现),通常不是单个 SQL 写错了,而是这批表共用同一类低效访问模式:没索引、索引失效、统计信息过期、或查询条件始终无法命中索引字段。这时候杀掉几个慢 SQL 只是掩耳盗铃——新请求一来,照样扫全表。
- MySQL 的
CPU 使用率过高告警常伴随大量SELECT或未提交事务,但根源可能是innodb_buffer_pool_size配得太小,导致频繁刷盘+重读 -
连接数达到上限看似是应用层不释放连接,实际常因某条 SQL 执行超时卡住连接,而下游服务又不断重试,形成雪崩式堆积 - SQL Server 出现重复告警(如
DeviceId + AlarmType + AlarmTime多次插入),表面是业务逻辑没去重,深层是缺乏唯一约束或幂等机制,数据已开始失真
告警噪声会掩盖真正致命的问题
当监控系统每分钟推送几十条 delete 被 kill 或 主从延迟 > 60s,运维和开发会本能地“挑最急的先处理”,结果是反复修同一个表的索引、调同一批参数,却忽略更底层的架构问题:比如定时删除任务没分批、没加限流,或主库写入流量早已超出单实例承载能力。
- 有赞的
sql-killer工具本意是兜底,但如果它每天自动 kill 掉上百条DELETE FROM t_log WHERE create_time ,说明归档策略根本没落地 - 查看
/home/ruby/log/adaptor_log/metric_adaptor.log发现rds413告警集中在某个业务库,就该立刻进库查pg_stat_user_tables,而不是先翻告警平台的聚合图表 - 很多团队把
OOM当成内存泄漏,其实可能是某条 SQL 的GROUP BY+ORDER BY在大表上生成了超大临时结果集,直接吃光sort_buffer_size
高频告警往往意味着修复成本正在指数级上升
一条慢查询刚出现时,加个索引可能 5 分钟搞定;等它引发连接池耗尽、主从延迟、应用超时雪崩后,就得停业务、切流量、改代码、压测验证——时间成本从分钟级跳到天级。
- GaussDB 的
seq_scan > 10是个关键阈值,不是“超过 10 次才要管”,而是“连续 10 次扫描没走索引,说明这个访问路径已被业务固化” - MySQL 的
max_connections从 200 调到 500 容易,但若真实并发峰值已达 480,说明你已经没有缓冲余量,下次流量脉冲就是故障 - SQL Server 中用
ROW_NUMBER() OVER (PARTITION BY ...)清重能救急,但若每天新增百万级告警,UNIQUE约束建好后必须同步检查历史脏数据,否则约束会直接报错阻断写入
最该警惕的不是某条告警的内容,而是同一类告警在不同时间、不同实例、不同业务模块里反复出现——那说明你正在用创可贴包扎动脉破裂。









