数据库工作台
维度 | 无锁执行(gh-ost 在线变更) | 原生执行(Online DDL) |
适用场景 | 大表变更(> 100 万行或 > 1GB)、业务高峰期、不允许阻塞读写、需要随时暂停或中止变更任务。 | 小表变更(< 100 万行且 < 1GB)、业务低峰期、追求快速完成、磁盘空间有限。 |
核心原理 | gh-ost 是一款无触发器的在线表结构变更工具。该工具通过影子表机制,在不影响原表正常读写的情况下完成结构变更,具体步骤如下:
| 直接在原表上执行 ALTER TABLE 语句。 MySQL 5.6 及以上版本引入的 Online DDL 机制(通常采用 INPLACE 算法)会在 InnoDB 引擎内部原地构建索引,并在执行期间通过 Online log 记录增量变更,最后在提交阶段短暂锁表应用变更。 |
方案优势 |
|
|
潜在劣势 |
|
|
维度 | 无锁执行 (gh-ost) | 原生执行 (Online DDL) |
执行方式 |
| 直接在原表执行 ALTER TABLE。 |
业务影响 | 极小。全程不阻塞读写操作。 | 存在 MDL 锁等待风险,可能短暂阻塞。 |
执行速度 | 较慢。需拷贝全量数据。 | 较快。原地构建索引。 |
磁盘开销 | 高。需额外约 1 倍表空间。 | 低。仅需索引大小空间。 |
可控性 | 支持暂停、中止、限流。 | 不可中止,无法限流。 |
推荐场景 | 大表、业务高峰期、高稳定性要求。 | 小表、业务低峰期、追求效率。 |