Então eu herdei esse banco de dados. No início, já havia alguns arquivos em pg_wal
.
Então, depois de algumas semanas, eu conto SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
, resulta: 8182 arquivos.
Observando o carimbo de data/hora do arquivo no pg_wal
diretório, vejo alguns novos arquivos sendo criados, mas o número de arquivos permanece o mesmo. Estou suspeitando que a rotação ocorre.
Então observo pg_stat_archiver
:archived_count = **2**; failed_count = 0
Cerca de 3 horas depois, eu conto novamente SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
. Resultado: 8183 . Obviamente, um novo arquivo é criado.
Então eu faço pg_stat_archiver
:archived_count = **3**; failed_count = 0
archived_count last_archived_wal last_archived_time failed_count last_failed_wal last_failed_time
3 000000010000009B00000083 22-09-13 13:14:20. 0
stats_reset
2022-09-13 08:14:19
Este banco de dados é muito baixo, não ocupado. Às vezes ninguém acessa. Mas há replicação lógica que sincroniza cerca de 300 registros uma vez por dia com outro servidor.
Aqui estão minhas configurações:
max_wal_size : 1024 Mb
min_wal_size : 2048 Mb
wal_keep_segment : 0
wal_rotation : ON
wal_level : logical
wal_compression : ON
archive_on : ON
archive_mode : test ! -f /Archive/%f && cp %p /Archive/%f
archive_timeout : 900
Perguntas :
- Por que a segunda contagem de
pg_wal
aumento? Estou esperando que diminua porque o número arquivado aumenta. - Se
wal_keep_segment = 0
, por que o número de WALspg_wal
nunca é 0 ? Na documentação diz:
Se wal_keep_segments for zero (o padrão), o sistema não mantém nenhum segmento extra para fins de espera,
- Por que o número mínimo de WALs, durante o período de baixa, não =
min_wal_size
+wal_keep_segment
?
Por favor me esclareça.
Muito obrigado
Primeiro, execute um
CHECKPOINT
no primário e veja se isso exclui alguns segmentos WAL (os pontos de verificação acontecem regularmente de qualquer maneira). Provavelmente, isso não eliminará os segmentos WAL.Em seguida, examine as causas conhecidas para o PostgreSQL se manter em torno do WAL:
wal_keep_size
(ouwal_keep_segments
em versões antigas): você já verificou issoproblemas do arquivador (procure
pg_stat_archiver
): você já fez isso tambémslots de replicação obsoletos:
Procure slots onde
active
estáFALSE
e o LSN é antigo.