Re: pg_restore - Performance ao criar FKs

From: Tiago José Adami <adamitj(at)gmail(dot)com>
To: Richard Klaumann <richard(dot)klaumann(at)gmail(dot)com>
Cc: pgsql-pt-geral(at)lists(dot)postgresql(dot)org
Subject: Re: pg_restore - Performance ao criar FKs
Date: 2023-05-16 17:19:24
Message-ID: CA+tEPeP1-xT1UuEZzwkqdM8n0F0zRdUA_=aBnjAOzQbWjRS6zg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-pt-geral

Olá, Richard.

Em seg., 15 de mai. de 2023 às 18:03, Richard Klaumann
<richard(dot)klaumann(at)gmail(dot)com> escreveu:
>
> Boa tarde equipe,
> estou migrando dados entre as versões 11 e 15 e estou enfrentando alguns problemas quanto a criação de FKs ao restaurar algumas das FKs.
>
> Realizo um backup de mais de 2800 tabelas partindo do PostgreSQL 11 rodando em um servidor com CentOS 8.

Suponho que esteja usando o pg_dump para criar um arquivo no formato
custom, correto?

> Ao realizar o restore no PostgreSQL 15 Ubuntu 22 o restore dos dados é feito com a mesma eficiência do restore na versão 11(apenas para comparação).
> No entanto, quando o banco 15 inicia a criação de algumas FKs o create é extremamente lento.
>
> Cenário:
> SO Ubuntu 22.4
> 8 VCPUs
> 18GB Ram
> PG 15.2
>
> Ex:
> "Tabela_1" com 264.736 de registros. PK Composta por 4 colunas, sendo 3 integer e uma numeric(25,0)
> "Tabela_2" com 6.077.761 de registros.
>
> Ao tentar criar a FK entre a "Tabela_2" e a "Tabela_1" com o banco 11 a FK é criada em poucos segundos. Já ao tentar criar a FK no banco 15 o comando fica em execução durante várias horas.(VMs idênticas)
>
> Obs: Se eu encerrar a criação da FK executada pelo pg_restore, e executar manualmente um vacuum analyze sobre a "Tabela_1" e criando a FK manualmente a criação tambem é feita em poucos segundos.
> Obs2: pg_restore executado com -j 4, quando não utilizo o "-j" os restores das versões 11 e 15 possuem tempos idênticos.
>
> No pg_restore da versão 11 as FKs são criada ao final do restore dos dados.
> Ex:
> Criação tabela_1;
> Criação tabela_2;
> Restore tabela_1;
> Restore tabela_2;
> Criação índices tabela_1;
> Criação índices tabela_2;
> Criação fk tabela_2;
>
> Já no 15 a criação das fks é feita da seguinte maneira:
> Ex:
> Criação tabela_1;
> Criação tabela_2;
> Restore tabela_1;
> Criação índices tabela_1;
> Restore tabela_2;
> Criação índices tabela_2;
> Criação fk tabela_2;
>
> Tenho a impressão que não há tempo hábil para a execução do vacuum analyze, o qual agiliza a criação das FKs.
>
> Alguém já passou por alguma situação parecida?

Eu não tive problemas com o pg_restore usando vários jobs, mas vou dar
um tiro no escuro aqui com o que suponho ser o motivo.

Tente aumentar o parâmetro autovacuum_max_workers para 6 (o dobro, já
que o padrão é 3).
Apenas para testes, eu mudaria também o autovacuum_naptime para 10
segundos. Os demais parametros de threshold do autovaccum estão de
acordo com a quantidade de registros das tabelas.

Você precisará reiniciar o serviço para ativá-los, antes de executar o restore.

Até onde eu me recordo (qualquer um fique à vontade para me corrigir
caso eu esteja errado) os arquivos de dump não contém a chamada de
VACUUM ANALYZE explícita, mas o autovacuum é executado.

Tiago J. Adami

In response to

Responses

Browse pgsql-pt-geral by date

  From Date Subject
Next Message Richard Klaumann 2023-05-16 17:35:45 Re: pg_restore - Performance ao criar FKs
Previous Message Richard Klaumann 2023-05-15 21:03:38 pg_restore - Performance ao criar FKs