【问题标题】:Are there any risks running ADD COLUMN AFTER in MariaDB/InnoDB?在 MariaDB/InnoDB 中运行 ADD COLUMN AFTER 是否有任何风险?
【发布时间】:2020-12-19 11:00:09
【问题描述】:

我是一名 DBA,在 Centos7 和 Centos8 上使用 MariaDB 10.4.13。

我们的开发团队需要在现有(小)表的中间添加一个新列。

所以我们用了这个:

ALTER TABLE tablename ADD COLUMN c1 enum('DEL', 'END') not null default 'END' AFTER c5;

这很好用,但我是这个主题的新手。 (我曾经担任 MS-SQL 和 DB2 的 DBA)。

我不知道 MariaDB 究竟(物理)使用 ADD AFTER 做了什么。有没有风险?这会导致任何问题吗?在 DB2 中,这并不容易。

【问题讨论】:

  • 您担心什么样的风险——语句运行期间表被锁定?您可以克隆您的实时数据库并在克隆上运行命令,看看是否有任何问题。
  • DDL操作会阻塞包括读写在内的DML操作。所以当你的表有大量数据时,会有很长的阻塞时间。为了更好的选择,你可以使用在线ddl操作,这将不阻止 DML 操作。
  • “小”表——去做吧。

标签: mysql mariadb innodb


【解决方案1】:

添加新列作为表格的最后一列还是在中间没有区别。任何改变行大小的改变都会创建一个新的表空间并将数据复制到一个新的表空间。这不会引起问题。

它会在复制过程中锁定表。但你说这是一张小桌子。这不是很具体(我不知道您认为什么是小或大),但可能不会花费很长时间。也许一两秒钟。

但是,如果应用程序一直在使用该表,那么即使是短暂的锁定也可能导致应用程序出现中断。您应该与您的经理讨论如何安排进行更改的最佳时间,这不会影响使用该表的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2013-11-02
    • 2016-07-08
    • 2021-05-03
    • 2014-01-30
    • 2016-11-19
    相关资源
    最近更新 更多