mysql在线执行DDL导致阻塞_使用MySQL 8.0的快速加列特性
MySQL 8.0 的 ADD COLUMN 卡住是因为不满足 INSTANT 条件而退化为 COPY 或 INPLACE需满足末尾加列、非 TEXT/BLOB/JSON/GEOMETRY 类型、无 DEFAULT 表达式、InnoDB 引擎等限制。MySQL 8.0 的 ADD COLUMN 为什么还会卡住不是所有 ADD COLUMN 都能“在线”——只有满足特定条件时MySQL 8.0 才真正走 INSTANT 算法否则仍会触发表拷贝或元数据锁等待。常见卡住现象ALTER TABLE t1 ADD COLUMN c1 INT 执行数分钟不返回SHOW PROCESSLIST 显示状态为 Waiting for table metadata lock同时业务查询开始堆积。必须加在表末尾不能用 AFTER xxx 或 FIRST列类型不能是 TEXT、BLOB、JSON、GEOMETRY不能带 DEFAULT 表达式如 DEFAULT (uuid())常量默认值可以DEFAULT 0表引擎必须是 InnoDB且 innodb_file_format Barracuda5.7 默认满足怎么确认你的 ADD COLUMN 走的是 INSTANT执行完 DDL 后立刻查 INFORMATION_SCHEMA.INNODB_TABLES 或用 SHOW CREATE TABLE 观察是否出现 ALGORITHMINSTANT 并非可靠依据——MySQL 不会在语句里显式写出它。真正有效的验证方式是看执行耗时与磁盘 I/O对千万行表INSTANT 操作通常在毫秒级完成若耗时 1s基本已退化为 COPY 或 INPLACE执行前后对比 SHOW GLOBAL STATUS LIKE Innodb_data_writesINSTANT 几乎不增加写次数开启 performance_schema 后查 events_statements_history_long看 SQL_TEXT 对应的 TIMER_WAIT 是否极小ALGORITHMINSTANT 不是万能开关显式写 ALGORITHMINSTANT 不会让不兼容的操作强行变快反而会直接报错 RedClaw 百度推出的手机端万能AI Agent助手