运行 ADD COLUMN AFTER in MariaDB/InnoDB 有什么风险吗?
Are there any risks running ADD COLUMN AFTER in MariaDB/InnoDB?
我是一名 DBA,在 Centos7 和 Centos8 上使用 MariaDB 10.4.13。
我们的开发团队需要在现有(小)table 的中间添加一个新列。
所以我们使用了这个:
ALTER TABLE tablename ADD COLUMN c1 enum('DEL', 'END') not null default 'END' AFTER c5;
这很好用,但我是这个主题的新手。 (我曾经担任 MS-SQL 和 DB2 的 DBA)。
我不知道 MariaDB 使用 ADD AFTER 到底(物理)做了什么。有什么风险吗?这会导致任何问题吗?在 DB2 中,这并不容易。
无论您将新列添加为 table 的最后一列还是在中间,都没有区别。任何更改行大小的更改都会创建一个新的 table 空间并将数据复制到新的 table 空间。这不会造成问题。
它确实在复制过程中锁定了 table。但是你说是小table。这不是很具体(我不知道你认为什么是小或大),但可能不会花很长时间。也许一两秒钟。
但是如果 table 一直被应用程序使用,即使是短暂的锁定也可能导致应用程序中断。您应该与您的经理讨论如何安排最佳时间来执行不会影响使用该 table.
的应用程序的更改
我是一名 DBA,在 Centos7 和 Centos8 上使用 MariaDB 10.4.13。
我们的开发团队需要在现有(小)table 的中间添加一个新列。
所以我们使用了这个:
ALTER TABLE tablename ADD COLUMN c1 enum('DEL', 'END') not null default 'END' AFTER c5;
这很好用,但我是这个主题的新手。 (我曾经担任 MS-SQL 和 DB2 的 DBA)。
我不知道 MariaDB 使用 ADD AFTER 到底(物理)做了什么。有什么风险吗?这会导致任何问题吗?在 DB2 中,这并不容易。
无论您将新列添加为 table 的最后一列还是在中间,都没有区别。任何更改行大小的更改都会创建一个新的 table 空间并将数据复制到新的 table 空间。这不会造成问题。
它确实在复制过程中锁定了 table。但是你说是小table。这不是很具体(我不知道你认为什么是小或大),但可能不会花很长时间。也许一两秒钟。
但是如果 table 一直被应用程序使用,即使是短暂的锁定也可能导致应用程序中断。您应该与您的经理讨论如何安排最佳时间来执行不会影响使用该 table.
的应用程序的更改