MySQL & MariaDB Online DDL参考指南( 三 )

  • ⑧ ⑨ 设置列为 [NOT] NULL 时 , 大量的数据被重新组织 , 代价高昂
  • ⑩ 修改 ENUM 和 SET 类型的列定义时 , 是否需要表拷贝取决于已有元素的个数和插入成员的位置
  • ? 在 MariaDB 10.4 之后 , 列排序支持 INSTANT 算法
  • ? 在 MariaDB 10.4.3 之后 , InnoDB 支持使用 INSTANT 算法增加列的长度 , 但是也有一些限制 , 具体参考 Changing the Data Type of a Column
  • 生成列
    MySQL & MariaDB Online DDL参考指南文章插图
    外键
    MySQL & MariaDB Online DDL参考指南文章插图
    说明:
    • ? 添加外键时 , 只有当 foreign_key_checks 选项被禁用的时候才支持 INPLACE 算法

    MySQL & MariaDB Online DDL参考指南文章插图
    【MySQL & MariaDB Online DDL参考指南】说明:
    • ?? 当字符集不同时 , 需要重建表
    • ??? 如果表中包含 FULLTEXT 的字段 , 则不支持 INPLACE
    表空间
    MySQL & MariaDB Online DDL参考指南文章插图
    限制
    • 在临时表 TEMPORARY TABLE 上创建索引时会发生表拷贝
    • 如果表上有 ON...CASCADE 或者 ON...SET NULL 约束 , 则 ALERT TABLE 不支持字句 LOCK=NONE
    • 在 Onlne DDL 操作完成之前 , 它必须等待相关表已经持有元数据锁的事务提交或者回滚 , 在这个过程中 , 相关表的新事务会被阻塞 , 无法执行
    • 当在大表上执行涉及到表重建的 DDL 时 , 会存在以下限制没有任何机制可以暂停 Online DDL操作或限制 Online DDL 操作的 I/O 或CPU使用率如果操作失败 , 则回滚 Online DDL操作的代价非常高昂长时间运行的 Online DDL 可能会导致复制延迟 。Online DDL 操作必须在 Master 上执行完成后才能在 Slave 上执行 , 在这个过程中 ,并发处理的 DML 在 Slave 上面必须等待 DDL 操作完成后才会执行 。