Temos cerca de 100 alterações simples para fazer em nosso esquema de banco de dados, como esta:
alter table transactions alter customer_sport_id type bigint;
Antes era int4. A maioria das colunas alteradas possui um ou mais índices.
Cada um leva cerca de 30 a 45 minutos em uma poderosa instância RDS dedicada (db.r6i.4xlarge) sem outra carga.
Temos que confirmar após cada linha para evitar o uso de todo o armazenamento.
O problema é que é lento, levará dias para fazer as alterações e não podemos ficar inativos por tanto tempo.
Há algo que possamos fazer para acelerar isso? Por exemplo
- descartando índices e criando-os novamente depois? (isso aceleraria?)
- desabilitando o WAL? Não tenho certeza se isso é viável ou arriscado (por exemplo, o banco de dados pode ser corrompido se a migração falhar no meio do caminho)
- Criar uma nova tabela e, de alguma forma, copiar todos os dados antigos para a nova tabela (poderíamos fazer isso em SQL ou exigiria um procedimento armazenado?), eliminar a tabela antiga e criar as sequências e índices na nova tabela ?
Aparentemente, colocamos aspirador uma vez por semana.
Aqui estão as estatísticas de desempenho do banco de dados da última hora (você pode ver no lançamento do armazenamento que duas instruções foram concluídas):