数据库的问题通常不会提前打招呼,它在你上线那天出现。我忽然觉得,这可能就是这一行的常态。我把这个自增主键的起始值往前调了,B 端客户不闹了。真香定律准时生效

这张表的自增 id 走到头了,我这才注意到。我想了想自己这些年,好像确实如此。我在心里默默给这个字段加了 NOT NULL,但要先洗数据。我沉默了,但心里是服的

这张表的历史包袱比数据还重。我发现自己居然没法反驳。我把这个 join 的顺序调整了一下,临时表不再落盘。真香定律准时生效

我把这条数据链路理了一遍,发现有个环节没人负责。我先给自己泡了杯茶,做好了打持久战的准备。我打开了这个慢查询的采样,发现集中在两个接口上。世界瞬间清净了

大事务跑了两个小时,期间锁住了整张核心表。我拉了个小群,把相关同学都叫了进来。我在心里把这次上线的回滚方案想了一遍,希望用不上。办公室安静得能听见键盘声

我把这个字段的类型定得太随意,三年后要还债。我把整条链路在心里复盘了一遍。我打开了这张表的碎片率,决定重建一次。复盘会上我们把它列成了案例

Explain 一打,type 是 ALL,rows 是八百万,我默默关掉了工单。我决定先把手上的事情做完再处理这件事。我打开了这个视图的定义,发现它嵌了四层子查询。同事说这波操作可以写进新人培训教材

大事务跑了两个小时,期间锁住了整张核心表。我盯着屏幕沉默了十分钟。我在心里给这个库的容量算了笔账,撑不过半年。这大概就是程序员的人生吧

这条语句在低峰期是好的,高峰期锁得死死的。我忽然觉得,这可能就是这一行的常态。我打开了这张表的碎片率,决定重建一次

这个字段的区分度很低,建索引的意义不大。我愣了两秒,然后继续敲代码。我在这个字段上补了个联合索引,从五秒降到了八十毫秒。这大概就是程序员的人生吧