我们需要对数据库模式进行大约 100 处简单的更改,如下所示:
alter table transactions alter customer_sport_id type bigint;
以前是 int4。大多数更改的列都有一个或多个索引。
在强大的专用 RDS 实例 (db.r6i.4xlarge) 上,每个操作大约需要 30-45 分钟,并且没有其他负载。
我们必须在每一行之后提交以避免用尽整个存储空间。
问题是它的速度太慢了,需要几天的时间才能做出改变,我们不能停机那么长时间。
我们可以做些什么来加快这些速度吗?例如
- 删除索引然后再次创建它们?(这会加快速度吗?)
- 禁用 WAL?不确定这是否可行或有风险(例如,如果迁移中途失败,数据库是否会损坏)
- 创建一个新表,然后以某种方式将所有旧数据复制到新表(我们可以在 SQL 中执行此操作吗,还是需要存储过程?),删除旧表,然后在新表上创建序列和索引?
显然,我们每周使用吸尘器清洁一次。
以下是过去一小时的数据库性能统计数据(从存储释放中可以看到两个语句已经完成):