Isso é novo para mim. Já procurei na net mas sem resultado.
Eu tenho um servidor, Servidor A , que está funcionando há algumas semanas, é um novo servidor. Eu configurei o FDW para este servidor acessar todas as tabelas de um public
esquema de 2 bancos de dados ( db B1 e db B2 ), vamos chamá-lo de Servidor B. Todas as tabelas são "armazenadas" em um esquema específico no servidor A em 3 bancos de dados diferentes (db A1, A2, A3). Existe também streaming replication
entre este servidor e o Servidor C
Aqui está o resumo do FDW que eu faço:
Configure o servidor B : adicione entrada
pg_hba
para aceitar todas as conexõescreate user fdwuser
, recarregue o arquivo de configuraçãoConfigure o Servidor A :
Crie esses esquemas no banco de dados A1, A2, A3 para armazenar os dados do servidor B :
CREATE SCHEMA reference; CREATE SCHEMA profile; GRANT USAGE ON SCHEMA profile TO jhon, bon; GRANT USAGE ON SCHEMA reference TO jhon, bon;
Crie a extensão FDW para cada banco de dados no banco de dados A1, A2, A3:
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
Criar servidores estrangeiros:
CREATE SERVER foreign_profile FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.8.40', port '5432', dbname 'db_profile'); ` CREATE SERVER foreign_referensi FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.8.40', port '5432', dbname 'db_reference');`
Criar mapeamento de usuário:
CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password 'secret'); CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 'secret'); CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password 'secret'); CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 'secret'); CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password 'secret'); CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user referensi, password 'secret');
Importe os esquemas externos para o banco de dados A1, A2, A3:
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_profile INTO profile; IMPORT FOREIGN SCHEMA public FROM SERVER foreign_referencd INTO reference;
Todo o processo é um sucesso. Posso acessar a tabela externa no Servidor B do Servidor A . Tudo bem, sem problemas.
Agora, verifico os arquivos WAL usando SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
. Ele mostra mais de 2100 arquivos . Isso é preocupante.
Aqui está a configuração no servidor A:
archive_command cd .
archive_mode on
checkpoint_completion_target 0.9
checkpoint_flush_after 32
checkpoint_timeout 300
wal_level replica
wal_keep_segments 8
max_wal_senders 10
max_wal_size 8192
hot_standby on
Então eu faço algumas verificações:
select * from pg_catalog.pg_stat_activity
Existem 250 entradas, dominadas por
backend_type
=parallel worker
ouclient backend
select * from pg_catalog.pg_stat_archiver
Failed_count = 0; Archived_count = 71;
Depois de alguns minutos, corro
select * from pg_catalog.pg_stat_archiver
novamente. Agora diz:Failed_count = 0; Archived_count = 3; -- it seems to be reset for some reasons
Verifique a replicação:
select * from pg_catalog.pg_stat_replication
. Resultados :state = streaming
sync_state = async
Este servidor parece estar ocupado, eu acho.
Perguntas:
- Por que os WALs continuam aumentando? Isso é normal? Se não, devo reduzi-los?
- Por que o
archived_count
reset? - O que esse comando faz:
archive_command cd .
?
A importação de esquemas estrangeiros precisa gerar WAL, pois precisa inserir as descrições dessas tabelas nos catálogos do sistema. Mas não deve gerar grandes quantidades de WAL, a menos que esses esquemas estrangeiros tenham um grande número de tabelas (é o número de tabelas e colunas que importa, não o número de linhas nas tabelas. Porque apenas a descrição das tabelas é registrada , não o conteúdo).
Portanto, provavelmente, o FDW não tem nada a ver com isso. É outra coisa que está gerando esse WAL e outra coisa (provavelmente slots de replicação) que está fazendo com que o WAL seja retido.
Você pode executar
pg_waldump
no WAL retido para tentar descobrir o que está causando tanto isso. Isso não é fácil de interpretar, então provavelmente seria melhor apenas pensar sobre o que seu sistema está fazendo além do FDW para criar teorias primeiro.