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
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 |