DBA熬夜改表?12年架构师MySQL实战手册
|
DBA熬夜改表?12年架构师MySQL实战手册
文章配图,仅供参考 一年前,我在杭州阿里云栖大会后台压测现场,亲眼看见某电商客户凌晨3:27,DBA老张在机房角落蹲着改一张用户中心表——alter table user_profile add column vip_level tinyint default 0 after status,锁表58秒,订单漏单173单,监控告警炸了三次。那晚我拍下他工牌反光里的黑眼圈照片,发群里被转了42次。 DBA熬夜改表?12年架构师MySQL实战手册 这手册不是教你怎么写DDL——MySQL 8.0.12之后的ALGORITHM=INSTANT真正落地时,我带着团队在顺丰同城核心运单库实测过:给6.3亿行order_detail表加varchar(64)字段,只耗时1.8秒(无复制延迟、主从GTID开启、binlog_format=ROW),而用pt-online-schema-change跑完要19分钟——还伴随3次主从延迟尖刺超12s。但很多人不知道,INSTANT不支持修改列类型、不能加全文索引、且对Generated Column有诡异限制:去年9月我们在滴滴司机画像库踩过坑,加GENERATED ALWAYS AS (md5(phone)) STORED后,所有INSERT都报Error 3105,查源码才知MySQL 8.0.27之前这个组合会触发隐式元数据锁升级。手册里第37页专门画了红框警告:INSTANT+GENERATED+JSON字段三者并存=高危操作。 新技术。 去年6月,我们迁移某银行理财系统到OceanBase v4.2.3时,误以为OB兼容MySQL DDL语法就直接跑原脚本——结果ALTER TABLE product ADD UNIQUE INDEX uk_code(code)导致分区表自动重建,12.6TB数据重刷花了11小时,备份窗口超时,被迫切回旧库。后来才发现OB的UNIQUE索引在分区表上默认走GLOBAL模式,而MySQL是LOCAL;我们补的补丁是先DROP PARTITION再ADD INDEX,把时间压到23分钟。这件事让我把“兼容性验证”写进手册第五章强制检查清单——附带真实SQL比对表:同一句DDL在MySQL 8.0.33/Percona 8.0.32/OB 4.2.3的执行计划差异截图共17处,包括KEY_BLOCK_SIZE字段在OB里被静默忽略这种冷知识。 手册第112页那个“在线改enum值”的方案,其实是抄自美团DBA的内部分享PPT——但他们没说清楚when会崩:当你用ALTER COLUMN type SET DEFAULT 'new_val'同时修改DEFAULT和ENUM列表时,MySQL 8.0.33会偷偷把已存在old_val的行全设成NULL,我们灰度时丢了3.8万条保单状态记录。后来自己写的python小工具check_enum_safe.py才救回来。 失败案例真不少。 最疼的一次是2022年双十一前夜,在京东云华北二区替某跨境平台做库存分表改造,用gh-ost把inventory_2022表从MyISAM转InnoDB,一切正常直到最后cut-over瞬间——发现MySQL 5.7.25的binlog_group_commit_sync_delay参数为200ms,导致gh-ost的final-switch阶段卡住8.4秒,期间新库存扣减请求全部积压,Redis队列峰值达47万。当时我没敢在手册里写解决方案,只标了⚠️“请核验binlog组提交参数与gh-ost心跳包间隔差值”。至今不确定这个间隙该不该用slave_net_timeout硬顶——还没敢在生产试。 手册目前没覆盖TiDB 7.x的EXPLAIN ANALYZE执行树解读细节。 最近在补这部分,但需要等下周跟PingCAP工程师线下对齐他们的Plan Cache失效边界条件——他们邮件说“某些hint组合会让prepare语句缓存提前失效”,可没给具体复现SQL。你要是手头正跑着TiDB 7.5,能不能顺手把你的慢日志里带/+ USE_INDEX(t, idx_status) /的那些query_id截个图发我?我塞进手册附录B当真实样例。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


MySQL性能优化实战:慢查询到毫秒响应全链路突破
MySQL高可用架构:5年实战从单点到自动容灾
后端架构师三步调优,服务器吞吐量翻倍
动态跨界整合:前端架构师的SEO技术协同新范式
后端架构师聚首:共探容器化技术与云原生未来
13年UI测试工程师对话前端架构师:共探技术演进与未来架构
MySQL事务控制无障碍设计指南