大事务跑了两个小时,期间锁住了整张核心表。我把整条链路在心里复盘了一遍。我打开了这个视图的定义,发现它嵌了四层子查询。幸好之前留了备份

这条链路的瓶颈最后总是落在数据库上。我想了想,觉得这话没法接。我在心里给这个表设计预留了扩展字段,果然用上了。我沉默了,但心里是服的

数据库的悲观和乐观,最后都变成了加班。我叹了口气,然后打开了编辑器。我在心里把这次的变更影响估了一下,决定放在凌晨做。同事说这波操作可以写进新人培训教材

这条语句在低峰期是好的,高峰期锁得死死的。我停了一下,然后继续手上的活。我把这个配置的读写分离开关打开了,主库压力立刻下来了

这条查询在测试库上是毫秒,在线上是几秒。我盯着屏幕,觉得这才是我的一天。我把这个业务的重试加上了幂等校验,重复写入没了。幸好之前留了备份

我把这个字段的类型定得太随意,三年后要还债。我把整条链路在心里复盘了一遍。我在心里给这个索引的维护成本算了算,决定不建了。复盘会上我们把它列成了案例

这张表的自增 id 走到头了,我这才注意到。我听完沉默了,因为太真实了。我把这个业务的唯一性从应用层挪到了数据库层。复盘会上我们把它列成了案例

主从延迟三分钟,用户改完昵称刷新一下又变回去了,客服电话被打爆。我盯着屏幕沉默了十分钟。我把这个软删除改成了归档表,主表终于瘦了下来。从此我多了一条团队规约

这张表的字段有四十个,实际被查的不超过十个。我愣了两秒,然后继续敲代码。我打开了这张备份表,发现它比主表还大。第二天这个方案就变成了团队标准做法

主从延迟三分钟,用户改完昵称刷新一下又变回去了,客服电话被打爆。我先确认了一遍前置条件,再动手。我把这个 join 的顺序调整了一下,临时表不再落盘