Remoção do inchaço com pg_repack - Recomendações da AWS

Remoção do inchaço com pg_repack

Você pode usar a extensão pg_repack para remover o inchaço da tabela e do índice com o mínimo de bloqueio do banco de dados. Você pode criar essa extensão na instância do banco de dados e executar o cliente pg_repack (em que a versão do cliente corresponde à versão da extensão) do Amazon Elastic Compute Cloud (Amazon EC2) ou de um computador que possa se conectar ao seu banco de dados.

Diferentemente do VACUUM FULL, o pg_repack não exige tempo de inatividade ou janela de manutenção e não bloqueia outras sessões.

O pg_repack é útil em situações em que VACUUM FULL, CLUSTER ou REINDEX pode não funcionar. Ele cria uma tabela que contém os dados da tabela inchada, monitora as alterações na tabela original e, em seguida, substitui a tabela original pela nova. Ele não bloqueia a tabela original para operações de leitura ou gravação enquanto está criando a outra tabela.

Você pode usar pg_repack para uma tabela completa ou para um índice. Para ver uma lista de tarefas, consulte a documentação do pg_repack.

Limitações:

  • Para executar o pg_repack, sua tabela deve ter uma chave primária ou um índice exclusivo.

  • O pg_repack não funcionará com tabelas temporárias.

  • O pg_repack não funcionará em tabelas que tenham índices globais.

  • Quando o pg_repack está em andamento, não é possível realizar operações de DDL em tabelas.

A tabela a seguir descreve as diferenças entre pg_repack e VACUUM FULL.

VACUUM FULL

pg_repack

Comando integrado

Uma extensão que você executa no Amazon EC2 ou no seu computador local

Requer um bloqueio ACCESS EXCLUSIVE enquanto está operando em uma tabela

Requer um bloqueio ACCESS EXCLUSIVE apenas por um curto período

Funciona com todas as tabelas

Funciona em tabelas que têm somente chaves primárias e exclusivas

Requer o dobro do armazenamento consumido pela tabela e pelos índices

Requer o dobro do armazenamento consumido pela tabela e pelos índices

Para executar pg_repack em uma tabela, use o comando:

pg_repack -h <host> -d <dbname> --table <tablename> -k

Para executar pg_repack em um índice, use o comando:

pg_repack -h <host> -d <dbname> --index <index name>

Para obter mais informações, consulte a publicação do Blog da AWS Remove bloat from Amazon Aurora and RDS for PostgreSQL with pg_repack.

Advertência

O erro error-on-invalid-index no pg_repack geralmente significa que um ou mais índices na tabela estão corrompidos ou são inválidos. O pg_repack não pode operar com segurança em tabelas com índices inválidos, porque depende dos índices para a consistência de dados durante o processo de empacotamento.

Esse erro ocorre quando:

  • O índice está marcado como inválido (por exemplo, devido a uma instrução CREATE INDEX CONCURRENTLY com falha).

  • O índice está corrompido (possivelmente devido a problemas de hardware ou desligamentos abruptos).

Use a consulta a seguir para identificar índices inválidos e eliminá-los primeiro, caso você os encontre.

SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;