Aurora MySQL -将列添加到表中卡住

muk1a3rh  于 2023-01-16  发布在  Mysql
关注(0)|答案(1)|浏览(123)

我有一个Aurora MySQL v2.10.2的示例
我正在尝试修改一个小表(3 k行)来添加一个新列。这是一个prod表,经常被查询/更新。
alter命令被卡住了,它还阻塞了后台运行的所有其他查询。所谓卡住,我的意思是它运行了超过1分钟,包括alter语句在内的所有查询都处于Waiting for table metadata lock状态。
不过,这不会超过几秒钟。
我无法升级到版本3或按照此处所述更改实验室设置以启用Fast/Instant DDL:https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2
有什么我可以检查的让这个改变运行。
到目前为止我已经试过这些了,每一个都卡住了。

ALTER TABLE table ADD COLUMN `my_col` int DEFAULT 100 AFTER another_col;
ALTER TABLE table ADD COLUMN `my_col` int;
ALTER TABLE table ADD COLUMN `my_col` int NULL;
kgsdhlau

kgsdhlau1#

听起来您在Aurora MySQL v2.10.2示例中修改表时遇到了表元数据锁的问题,正如您提到的,当表不断被查询/更新时可能会发生这种情况。
以下是您可以尝试解决此问题的一些方法:
尝试在alter操作期间减少表的工作负荷。可以通过临时禁用对表的更新或将查询重定向到副本来实现此目的。
增加MySQL配置文件中的innodb_buffer_pool_size参数。此参数控制用于高速缓存数据和索引页的内存量,增加此参数有助于减少表锁的影响。
增加MySQL配置文件中的innodb_lock_wait_timeout参数。此参数控制会话在放弃并返回错误之前等待锁定的时间。通过增加此值,可以允许alter语句有更多的时间完成。
请尝试在维护窗口或低使用率期间运行alter语句。
请尝试将ALTER命令拆分为多个命令。例如,可以使用新列创建一个新表,然后使用SELECT INTO语句传输数据,之后可以删除原始表并重命名新表。
如果上述解决方案都不起作用,您可以考虑使用Percona的"pt-online-schema-change"工具。

相关问题