Skip to content
GitHub Twitter

2024-09-10 数据库故障复盘

⚠️ 事故评级

P0- | 业务功能完全中断,业务数据完好或轻微损失

📖 事故复盘:

1️⃣ 2024/09/10 10:30 AM 发现网站无法访问,CPU 持续占用 100%;推测是 CC 攻击,排查 WAF 及 Nginx Access Log 发现并无异常;断开主机公网发现占用依然存在;

2️⃣ 2024/09/10 11:00 AM 开始排查数据库问题,发现 10 - 30 个事务在针对用户流量更新与使用统计的表进行修改时触发悲观锁,导致后续事务无法进行;尝试强制结束事务失败,新事务会不断产生然后锁定;

3️⃣ 2024/09/10 13:30 PM 开始排查 PHP Laravel 框架代码问题,怀疑锁操作出现故障;同时联系专业技术人员介入支持;

4️⃣ 2024/09/10 14:30 PM 针对相关 Job 引入重试机制,但没有收到预期的 Log 输出,推测是 DB 组件无法进行写操作导致代码执行不到生成 Log 的环节;

5️⃣ 2024/09/10 16:00 PM 场外技术支持指出,有可能是使用统计的 日志表 积累过多,达到索引缓存的阈值后导致索引效率断崖下跌,进而任务出队速度远小于入队速度,造成计算资源阻塞;尝试清除 7 天前的统计资料如流量消耗等,任务处理速度明显回升,约 5 分钟后一半的悲观锁解除,网站基本恢复正常。

🛠 技术改进:

短期内适当上调 InnoDB Buffer Size,同时维护更激进的日志清除策略;

长期规划重构相关业务代码,从根本上消除事务堆积的隐患。

🎁 善后措施:

如果有用户发现流量异常消耗,可以在 本日 23:59 前发送工单免费重置流量。

已经自动为所有流量异常(流量使用 >> 套餐内流量)的客户重置流量到 25%。