语言
<< 返回文章列表

数据库监控简史:13张图表为什么没能阻止一场灾难

2026年8月31日
,
,
,
D
B
A
,
Shawn.W
3
 

监控最大的失败,不是没有发现异常,而是发现了异常,却没能把它组织成足以改变决定的证据。

数据库监控的历史,可以追溯到数据库诞生的源头。

数据库的诞生,曾经服务于登月

现代数据库史上有一个富有象征意味的开端——一个为了管控登月工程复杂性的系统,成为早期数据库管理系统的重要代表。20世纪60年代,阿波罗计划需要管理飞船与土星五号火箭涉及的海量零部件、物料清单和工程变更。1965年前后,IBM与North American Aviation(后来的Rockwell International)合作开发信息管理系统(IMS)。第一版ICS/DL/I(即IMS的前身)于1967年交付;1968年8月14日,第一条“IMS READY”信息显示在加州多尼市Rockwell Space Division的一台IBM 2740终端上;1969年IBM以IMS/360的名字将其推向商业市场。由此,IMS成为世界上第一个层次数据库管理系统,为保证阿波罗飞船1969年顺利登月作出了重要贡献。

阿波罗计划的另一面,是对飞行状态的持续追踪。遥测、速度、推力、轨迹与设备状态被源源不断送入控制中心,服务于一次次 go/no-go 决策。数据库管理零件、关系与变更,监控观察正在运行的系统;两者并不是同一种技术,却共享同一个工程问题:怎样把规模庞大、彼此分散的数据,组织成关键时刻可以信赖的判断。可以说,数据库诞生于人类管理复杂性的需要,而监控诞生于人类解释运行中复杂性的需要。

图1:IMS起源于为阿波罗工程管理庞大物料清单与工程变更的需求。

发射前夜:13张图表与一个决定

1986年1月27日晚——“挑战者号”发射前夜,NASA、马歇尔航天飞行中心与固体火箭助推器承包商莫顿·塞奥科公司(Morton Thiokol)公司召开电话会议。天气预报显示,第二天清晨将异常寒冷,发射时环境温度预计只有26—29华氏度。莫顿·塞奥科的工程师担心低温会降低“O形密封圈”的弹性,使其无法及时贴合金属表面;高温燃气一旦穿过尚未完成密封的缝隙,后果将不可逆转。他们建议:如果O形圈温度低于此前飞行经验中的53华氏度,就不应发射。

讨论中反复出现的53华氏度,更准确地说,是当时最低的既有O形圈温度经验值,主要依据一次低温飞行及其异常建立,并不是经过充分统计验证的“安全阈值”。但在发射压力与证据表达的双重作用下,问题逐渐从“能否证明低温下安全”,倒置成了“能否证明低温下一定会失败”。莫顿·塞奥科管理层重新讨论后改变立场,最终同意发射。

1986年1月28日,“挑战者号”升空约73秒后爆炸解体,七名航天员遇难。后来,罗杰斯委员会(Rogers Commission)认定,右侧固体火箭助推器尾部连接处的压力密封失效是事故的技术原因,寒冷天气加剧了O形圈的问题;同样严重的,还有安全信息没有被完整传递,工程判断没有进入应有的决策层级。

爱德华·塔夫特*(Edward Tufte)后来研究了发射前夜传真给NASA并在电话会议中使用的13张图表数据。塔夫特是图表、示意图等信息图呈现方面的专家,他展示的这些图表的内容非常丰富——接头编号、侵蚀深度、受影响角度、燃气痕迹、试验结果,甚至大量手写说明都在其中。问题在于,数据没有围绕当晚唯一需要回答的问题组织起来:在预计的低温条件下,继续发射是否安全?

*爱德华·罗尔夫·塔夫特(Edward Rolf Tufte, 1942—),也被称为“ET”,是耶鲁大学的美国统计学家,也是政治学、统计学和计算机科学的杰出教授。他以其关于信息设计的著作而闻名,并且是数据可视化领域的先驱,著有The Visual Display of Quantitative Information、Visual Explanations等。本文参考其撰写的Visual and Statistical Thinking(1997)。

 

第一层缺失:关键数据没有建立关系

塔夫特引用工程管理研究者Frederick Lighthall的逐图检查给出了一个令人不安的结果:13张图表中有6张根本没有列出可供比较的O形圈温度、燃气穿透或损伤数据;余下7张中,又有6张只呈现温度或异常中的一项。某张图讲侵蚀深度,另一张图讲接头位置,还有图表使用不同编号、不同单位和不同排序。读者需要在十几张纸之间来回跳转,才能勉强拼出一条因果链。

工程师的理论方向其实是对的:低温可能导致密封延迟,密封延迟可能造成燃气穿透。但展示没有沿着这条因果关系展开。温度在一处,损伤在另一处,时间顺序与严重程度又散落在别处。数据只有进入关系,才会成为证据。监控最大的失败,不是没有发现异常,而是发现了异常,却没能把它组织成足以改变决定的证据。

这与今天的数据库故障并无二致:CPU曲线在主机页,数据库时间(DB Time)在实例页,SQL排名在性能页,发布记录在工单系统,业务超时又在另一套平台。如果它们没有被对齐到同一时间轴,屏幕再多,也只是把当年的13张图表换成了13块仪表盘。数据不一定越多越好,真正重要的是彼此间的关系。

图2:原始材料中的损伤数据非常详细,但关键的温度维度没有出现在同一视图中。

第二层缺失:没有正常样本,就没有真正的异常

更关键的遗漏,是“成功飞行”。当晚的材料集中展示了出现过O形圈侵蚀或高温燃气穿透迹象的飞行任务,却没有把大量未出现此类异常的任务放进同一个坐标系中比较。只看故障样本,无法判断低温是否真的比高温更危险,也看不到风险随温度变化的方向,人们会觉得O形圈问题在各种温度下都可能发生。数据库分析里同样常见这种错误:只抓出十条慢SQL,却不提供它们在正常时段的基线、调用量和执行计划变化。结果看似聚焦,实际上丢失了分母。只有把全部数据都放进来,图景才完全不同。

塔夫特在他的研究中把此前24次飞行的温度与O形圈状态重新放在一起:把每次飞行作为同一种观察单位,把温度放在共同横轴上,把损伤与未损伤同时编码,再把第二天的预测温度标在相同尺度中。这样,历史样本、结果差异与即将采取的行动第一次出现在同一视野里。记录回答“发生过什么”,关系才开始回答“为什么值得改变决定”。

图3:塔夫特把24次历史飞行放在同一关系图中,26—29°F落在既有经验之外。

如图3所示,66华氏度是未发现O形圈问题的最低发射温度;低于66华氏度且高于53华氏度的几次飞行均出现损伤。这个关系虽不能替代完整的工程模型,却足以让“低温是否危险”从模糊争论变成必须正面回答的问题——29华氏度不只是更低的温度,而是远离既有经验的位置区域,那么换做是你,会发射吗?

没有正常样本,就没有真正的异常;监控也不是孤立地寻找异常,而是在正常世界与异常世界之间建立边界。

第三层缺失:29°F不是异常值,而是未知值

前文讲过,“挑战者号”发射时预计的气温是26—29华氏度,远低于任何一次既有飞行经验。这并不是一个“比53°F更低”的异常值,也不是把告警标成红色就能表达的状态。它意味着系统即将进入从未被验证过的运行区域。没有历史失败记录,并不等于已经证明安全;在经验边界之外,证据的空白本身就是风险。

图4:尽管原始材料中同时出现53°F门槛和29°F预测,但两者没有形成清晰的风险关联。

这也是数据库监控常被忽略的一层。CPU负载超过90%可能是故障,也可能只是业务高峰;TPS翻倍未必触达阈值,却可能把连接池、日志写入或存储延迟推入从未压测过的容量区间。面对这样的状态,监控不应只说“正常”或“异常”,还应回答:当前状态与基线相比改变了什么,是否越过历史经验边界,我们对这片区域知道多少,以及是否需要降载、扩容或暂停变更。

因此,监控能力的演进并不是简单地把阈值调得更准,而是从阈值走向趋势,从趋势走向基线,从基线走向关联与根因,再走向预测、决策和自动行动。阈值告诉我们线被碰到了;经验边界提醒我们,有些地方甚至还没有线。

一切决策的基础在于数据。zCloud在10多年前开始构建监控系统时,就将基础数据作为核心基座。有了长期积累的数据,基线和阈值就自然呈现,告警就更精准。

别把事故简化成“图没画好”

当然,“挑战者号”事故不能被简化成一次可视化失败,我们更不能推断只要换一张清晰的图表,发射就会取消。一张好图无法替代安全文化,也无法自动消除进度压力、权力差异和沟通断层。罗杰斯委员会的结论比“可视化失败”沉重得多:沟通链条失效,工程判断与管理判断冲突,安全问题没有进入应有的决策层级,组织还逐渐把O形圈侵蚀当成了可以接受的常态。

事故前,O形圈侵蚀与燃气穿透并非第一次出现。恰恰因为异常出现过,而航天飞机仍然安全返回,组织逐渐把本应触发重新评估的风险,解释成“虽然不好,但可以接受”。这种现象后来常被称为“异常正常化”:每一次侥幸过关,都在悄悄改写人们心中的正常。监控系统最大的敌人之一,正是异常正常化。

数据库现场也一样:一条SQL每天慢几分钟,表空间每周告警,复制延迟反复升高,连接数长期贴近上限。因为系统昨天没有宕机,今天的红灯就被默认为背景噪声;久而久之,告警阈值被调高,值班人员不再响应,真正的风险被熟悉感包裹起来。正常不应由“我们已经看习惯了”定义,而应由容量、服务目标和可验证的安全裕量定义。

罗杰斯委员会的报告中还引用了Richard Feynman对这种风险认知的批评:这种逻辑就好比俄罗斯轮盘赌(Russian Roulette)——上一次扣动扳机没有出事,并不会让下一次更安全。

对数据库而言,没出事故不是系统健康的证明,有时只是安全裕量还没有耗尽。监控不仅要记录红灯出现了多少次,还要追踪风险是否在积累、处置是否真的完成,以及同一类异常为何能够一再被容忍。

真正可怕的不是第一次异常,而是“异常正常化”。我们曾经在电信场景遇到典型的故障,一条SQL执行计划从未改变,但是查询逻辑因为索引问题导致每次读取的I/O都在缓慢增加,最终超过临界值,导致了一次灾难性事故。有了这样的故障案例,zCloud就基于底层数据,增加了趋势分析的指标维度——即使数据库运行正常,但是核心SQL如果发生性能衰减,也将提出预警。

回到数据库监控现场

从“挑战者号”航天飞机灾难事件回到DBA更熟悉的故障处理场景,会发现数据库现场并不缺“13张图表”。AWR可以有上百页,监控平台可以采集上千个指标,故障讨论群里还能同时飞来几十张截图。可当负责人问“要不要回滚”“是否切换主库”“哪条SQL拖垮了交易”时,材料仍可能答非所问。

一份真正面向决定的监控材料,首先要写清楚服务于什么决定。是继续观察、限制流量、杀会话、回滚版本,还是执行主备切换?不同决定需要不同证据。

其次,要把业务响应、DB Time、AAS、等待事件、主机负载与变更记录对齐到同一时间窗口内。没有时间关系,相关性会被切断,先因后果也可能被颠倒。

第三,要让异常样本带上正常基线,既看失败,也看成功;既看当前峰值,也看同业务周期的历史分布。

第四,要保留关键诊断维度:数据库、实例、服务、用户、SQL、会话、执行计划、等待事件、对象、主机和存储层需要能够逐层下钻关联。这决定了我们是在解释系统,还是只在浏览数字。

第五,要主动标记采样缺口、监控盲区、保留期不足、跨库链路缺失,以及超出历史容量范围的负载。数据库没有报错,不等于风险不存在。

最后,还应跟上预期收益、操作风险、空间消耗、回退方案,以及用什么指标判断它确实生效。

图5:面向决定的监控路径:从证据组织到行动闭环。

这条路径也解释了现代数据库管理平台为何不再满足于多放几块仪表盘。以zCloud为例,如果统一监控能够与日常巡检、SQL分析、性能与容量、高可用、备份恢复以及自动化操作共享同一套对象、时间线和审计链,那么一次告警就不必止于“看见红灯”,而可以继续走向定位、评估、处置与验证。这里更值得关注的就是监控正在从孤立的观察工具,变成数据库运行的控制面。

从看见数据库,到理解数据库,再到帮助数据库做决定,这是数据库监控几十年演进的主线。监控的终点也不是一张更漂亮的Dashboard,而是让正确的人在正确的时间,看见足够完整的证据,并采取可验证、可回退的行动。

资料来源
  1. IBM, Information Management Systems:https://www.ibm.com/history/information-management-system

  2. IBM Docs, History of IMS: Beginnings at NASA:https://www.ibm.com/docs/en/zos-basic-skills?topic=itn-history-ims-beginnings-nasa

  3. Edward R. Tufte, Visual and Statistical Thinking: Displays of Evidence for Making Decisions, Graphics Press, 1997

  4. Presidential Commission on the Space Shuttle Challenger Accident, Report to the President, Vol. 1, Chapters V–VI, 1986: https://www.nasa.gov/history/rogersrep/v1ch5.htm; https://www.nasa.gov/history/rogersrep/v1ch6.htm

  5. NASA, STS-51L Mission: https://www.nasa.gov/mission/sts-51L/

  6. 云和恩墨,zCloud多元数据库智能管理平台:https://enmotech.com/products/zCloud

未完待续

 

数据库监控需求咨询

扫码添加云和恩墨小助手

备注“监控咨询”