稳定性治理日志(五):夜航双盲

2025/05/29

稳定性治理日志(五):夜航双盲

本故事纯属虚构,如有雷同,纯属巧合。

凌晨两点四十七分,空调出风口发出细微的震颤声,像垂死之人的喉结在滚动。

我盯着屏幕上跳动的数字,光标在迁移脚本的进度条末端抽搐。这是第七次重跑,分表程序像被灌了铅的马拉松选手,在会员数据表三亿条数据的赛道上蹒跚。键盘缝隙里嵌着半块奥利奥碎屑,是五小时前临时充饥时掉落的,此刻正散发甜腻的腐坏气息。

“最后一次。”我对着屏幕喃喃自语,按下回车键时指节发白。

走廊尽头的安全出口指示灯突然闪烁起来,绿光在瓷砖地面投下扭曲的波纹。这栋楼的老电路总在夜深人静时作祟,但这次不同——显示器右下角的监控小窗里,代表数据库磁盘的紫色进度条正以肉眼可见的速度膨胀。

我后颈的汗毛突然竖起。WAL日志文件数半小时前还是1024,现在已突破临界值的4096。它们像极地冰川般层层堆积,在无人察觉的深夜里生长出危险的棱角。

手机在桌面震动,贴着桌面的半杯可乐泛起涟漪。运维群跳出消息:

[凌晨03:14] alert bot:订单支付回调失败率异常

我猛地起身,椅子在地面划出刺耳的刮擦声。监控大屏上,PostgreSQL的磁盘使用率曲线呈90度直角上升,像被无形的手拽向深渊的黑色风筝。

“陈麦!”

一通急促的电话打了进来,是黄工。”你在做数据迁移吗?”

“是…“我的声音卡在喉咙。屏幕突然黑了下去,所有监控指标归零的瞬间,空调发出垂死的哀鸣。整层楼的应急照明同时亮起,在墙面投下蛛网般的阴影。

我被拉入了一个紧急的腾讯会议,我看到他调出WAL目录实时监控,ls命令输出的文件描述符如瀑布倾泻:

postgres 58904  /data/pg_wal/000000010000003A000000FD  
postgres 58904  /data/pg_wal/000000010000003A000000FE  
postgres 58904  /data/pg_wal/000000010000003A000000FF

“每次迁移脚本的执行,虽然你清空了已跑过的数据,但 WAL 的大小只会随着你执行的次数而增加。”他的声音像手术刀般冰冷,”你重复执行了七次,每次都在制造新的WAL冰锥。”

黄工突然扯下左腕的智能手表,表盘背面有经年累月留下的汗渍。”听好,”他把手表拍在桌上,”现在每分钟有三百个支付请求在超时,但真正的灾难在这里——”

他调出WAL归档监控,红色警报铺满整个屏幕。WAL文件正以每秒2个的速度堆积,而磁盘剩余空间,只剩0.23GB。

“立刻终止所有迁移进程!”他对着值班频道怒吼,”启动主从切换应急方案!”

我的手在键盘上颤抖。当kill -9命令发出的瞬间,天花板突然传来”咔”的裂响,中央空调出风口坠下一片金属挡板,在寂静中炸开惊雷般的回响。

五分钟后,备用从库艰难扛起流量。黄工调出监控曲线,主库磁盘的紫色进度条在99.8%处定格,像即将爆裂的血管。

“知道为什么DBA手册第一条是’永远不要相信人类的自觉’吗?”他撕开速溶咖啡包装袋的手指在发抖,”因为人性总会选择最省力的错误选项。”

他切换出 Grafana 监控,指向WAL生成速率指标:”你改良后的多线程迁移,把WAL生成速度提升了八倍,却没人盯着这个死亡计数器。”

我的胃部开始绞痛。凌晨两点时那个优化点——把批量插入改成并发流水线——此刻在监控图上化作一柄滴血的镰刀。

“所有技术方案的棺材,”黄工突然用咖啡勺敲击保温杯,金属撞击声让所有人一颤,”都要用监控指标当钉子才能封死。”

黎明时分,我们蜷缩在工位等待数据修复。黄工忽然扯开左袖,露出小臂上密密麻麻的针孔状疤痕——那是去年某次类似事故后,连续一周静脉注射留下的印记。

“系统不会突然死亡。”他用棉签蘸着碘伏擦拭U盘接口,”它只会慢慢窒息,就像此刻——”他指向仍在报警的从库监控,”这些延迟复制的WAL,都是系统肺叶里逐渐纤维化的肺泡。”

当第一缕阳光刺破云层时,主库终于完成抢救。黄工在晨会上调出两张并排的监控图:左边是WAL堆积曲线,右边是支付失败率曲线,两条红线在03:14分完美重合。

“今晚开始,”他的投影仪光束里漂浮着无数尘埃,”所有重大变更实施时,必须开启双人监控模式——一个盯进度,一个盯指标,就像…”

他忽然停顿,从口袋里摸出那支旧钢笔。笔帽上有道裂纹,用绝缘胶布缠了三圈。

“就像心脏手术时的麻醉师和主刀医生。”钢笔在屏幕敲出清脆声响,”一个负责拯救生命,一个负责聆听生命体征的每一次异动。”

散会后,他们都去吃早饭了,我独自留在工位。备用空调开始送风时,出风口飘下一片灰白色的墙皮,落在WAL目录监控屏上,像极了一个未归档的日志碎片。

日光灯管突然闪烁,我在玻璃幕墙的倒影里看见自己扭曲的脸。身后,那个本该显示实时指标的屏幕角落,一小块红斑正在缓慢扩散,像正在凝结的血痂。

Post Directory