【发布时间】:2021-10-20 16:10:56
【问题描述】:
我有一个具有以下设置的 RDS MySql:
- 类:db.m5.xlarge
- 存储:预置 1000 IOPS (SSD)
然后我想在一个大小约为 20 GB 的表中添加几列(根据INFORMATION_SCHEMA.files)。这是我的声明:
ALTER TABLE MY_TABLE
ADD COLUMN NEW_COLUMN_1 DECIMAL(39, 30) NULL,
ADD COLUMN NEW_COLUMN_2 DECIMAL(39, 30) NULL,
ADD COLUMN NEW_COLUMN_3 INT(10) UNSIGNED NULL,
ADD CONSTRAINT SOME_CONSTRAINT FOREIGN KEY (NEW_COLUMN_3) REFERENCES SOME_OTHER_TABLE(SOME_OTHER_PK),
ADD COLUMN NEW_COLUMN_4 DATE NULL;
此查询需要 172 分钟才能执行。大部分时间都花在将数据处理到临时表上。
在该操作期间,没有执行其他查询(读取或写入)。我只有自己的数据库。 SHOW FULL PROCESSLIST 说 State 等于 copy to tmp table 我的查询。
我不明白的是,AWS RDS 控制台告诉我写入吞吐量在 30 MB/s 和 35 MB/s 之间持续了 172 分钟。
假设写入吞吐量为 30 MB/s,我应该能够写入 30 * 60 * 172 = 309600 MB = 302 GB。这比操作期间创建的临时表的大小 (20 GB) 大得多。
那么两个问题:
- mysql/rds 在我的临时表旁边写了什么?有没有办法禁用它,以便我可以获得创建临时表的全部带宽?
- 有什么方法可以加速该操作吗?写入 20 GB 数据需要 3 小时似乎相当长。
【问题讨论】:
-
最好在dba.stackexchange.com提出这个问题
标签: mysql amazon-web-services amazon-rds