【问题标题】:In MySQL 5.6 "Alter Table Add Columns" not allowing DML concurrency在 MySQL 5.6 “Alter Table Add Columns” 中不允许 DML 并发
【发布时间】:2014-10-29 18:10:47
【问题描述】:

MySQL 5.6 声称 DDL 操作将以最大可能的并发性运行。 http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

“允许并发 DML?”列显示哪些操作可以完全在线执行;首选值为“是”。您可以指定 LOCK=NONE 来断言在 DDL 期间允许完全并发,但 MySQL 会在可能的情况下自动允许此级别的并发。当允许并发 DML 时,也总是允许并发查询。

但是,我刚刚尝试了“ALTER TABLE ADD COLUMN...”语句,并且该表在此操作期间似乎被锁定。 当我重新运行该语句并附加“,ALGORITHM=inplace,LOCK=none”时,它需要更长的时间,但该表仍然可以使用。我认为 MySQL 会为特定语句使用可用的最高并发级别,那么为什么我必须明确指定它们?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    Online DDL允许并发 DML 的事实并不一定意味着它默认会抓住每一个机会这样做。

    关于“尽可能允许这种级别的并发”的语言有点难以解释。你可能会假设 MySQL 在可能时总是 使用 inplace 算法,但反过来想它:这实际上意味着它在不可能时不允许 inplace 算法。如果就地 DDL 是可能的,它会允许它,但除非你请求它,否则它实际上不会使用该算法。

    您自己观察到在线 DDL 速度较慢。使用更快的方法不是一个合理的默认值(因为大多数人都希望事情变得更快)?毕竟,表可能足够小,以至于非就地 ALTER 将花费不到 1 秒的时间,因此它不会造成太大的中断。在所有可能的情况下启用就地 ALTER 会使它们花费更长的时间默认情况下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多