我把这个业务的事务范围画了出来,比我想的大很多。我在心里把涉及的所有环节都过了一遍。我打开了这张表的历史版本,发现字段被改过两次名。办公室安静得能听见键盘声
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
这张表的历史包袱比数据还重。我忽然觉得,这可能就是这一行的常态。我把这个字段的字符集统一了,乱码问题终于消失。这条经验值直接拉满
主从延迟三分钟,用户改完昵称刷新一下又变回去了,客服电话被打爆。我把整条链路在心里复盘了一遍。我打开了这张表的自增 id 走势,发现中间有段跳号。这大概就是程序员的人生吧
索引不是越多越好,我是在加了第七个之后明白的。我想了想,觉得这话没法接。我在心里把这次的变更影响估了一下,决定放在凌晨做。感动,然后我学到了新的一课
这条语句在低峰期是好的,高峰期锁得死死的。我笑了笑,决定不解释。我把这个冷数据迁了出去,查询终于回到秒级。这大概就是程序员的人生吧
主从延迟三分钟,用户改完昵称刷新一下又变回去了,客服电话被打爆。我深呼吸了一下,决定从最可疑的地方查起。我打开了这个慢查询的采样,发现集中在两个接口上。第二天这个方案就变成了团队标准做法
我把这个业务的唯一约束想清楚了,然后发现拦住了自己。这套流程走下来,我从头到尾又确认了一遍。我加了行号限制,先把线上风险压下去再慢慢优化。幸好之前留了备份
这张表的自增 id 走到头了,我这才注意到。我想反驳,但发现他说得对。我把这个 join 的顺序调整了一下,临时表不再落盘。第二天这个方案就变成了团队标准做法
数据库的悲观和乐观,最后都变成了加班。我抬起头看了看周围,大家都一样。我在心里给这个表设计预留了扩展字段,果然用上了。果然现实比段子更精彩
一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我把手上的资料翻出来又读了两遍。我在心里把这条 SQL 的扫描行数算了一遍,量级不对。这条经验值直接拉满