Reindexação de uma tabela quando o autovacuum está em execução - Amazon Relational Database Service

Reindexação de uma tabela quando o autovacuum está em execução

Se um índice se tornar corrompido, o autovacuum continuará processando a tabela e falhará. Se você tentar um vacuum manual nessa situação, receberá uma mensagem de erro semelhante à mostrada a seguir.

postgres=> vacuum freeze pgbench_branches; ERROR: index "pgbench_branches_test_index" contains unexpected zero page at block 30521 HINT: Please REINDEX it.

Quando o índice está corrompido e o autovacuum está tentando ser executado na tabela, você lutará com uma sessão de autovacuum já em execução. Ao emitir um comando REINDEX, você remove um bloqueio exclusivo na tabela. As operações de gravação são bloqueadas, bem como as operações de leitura que usam esse índice específico.

Para reindexar uma tabela quando o autovacuum está em execução nela
  1. Abra duas sessões no banco de dados que contém a tabela em que você deseja realizar vacuum. Para a segunda sessão, use "screen" ou outro utilitário que mantenha a sessão se a conexão for encerrada.

  2. Na sessão um, obtenha o PID da sessão de autovacuum em execução na tabela.

    Execute a seguinte consulta para obter o PID da sessão de autovacuum.

    SELECT datname, usename, pid, current_timestamp - xact_start AS xact_runtime, query FROM pg_stat_activity WHERE upper(query) like '%VACUUM%' ORDER BY xact_start;
  3. Na segunda sessão, emita o comando reindex.

    \timing on Timing is on. reindex index pgbench_branches_test_index; REINDEX Time: 9.966 ms
  4. Na sessão um, se o autovacuum estava bloqueando o processo, você verá em pg_stat_activity que a espera é "T" para a sua sessão de vacuum. Nesse caso, você encerra o processo de autovacuum.

    SELECT pg_terminate_backend('the_pid');

    Nesse ponto, sua sessão começa. É importante observar que o autovacuum é reiniciado imediatamente, pois essa tabela é provavelmente a mais alta em sua lista de trabalho.

  5. Inicie seu comando na sessão dois e depois termine o processo de autovacuum na sessão um.