PostgreSQL 9: Aspirar uma tabela no primário é replicado no espelho?

18

Execução do PostgreSQL 9.0.1, com replicação de streaming, mantendo uma instância de espelho somente leitura atualizada. O vácuo automático está ativado no primário, exceto por algumas tabelas que não são aspiradas pelo daemon de vácuo automático, em um esforço para reduzir a IO do horário comercial. Essas tabelas são "visualizações materializadas".

Todas as noites à meia-noite, executamos um vácuo no banco de dados para limpar as tabelas excluídas do vácuo automático. Gostaria de saber se esse processo se replica no espelho, ou se eu preciso configurar o vácuo no espelho também?

Scott Herbert
fonte
11
Excelente pergunta. A replicação de streaming usa o Write-Ahead Log, portanto, se resume a se as alterações feitas pelo VACUUM são registradas ou não.
DerfK
11
Curiosamente, eu ativei o vácuo automático no espelho somente leitura, mas, olhando nas estatísticas da tabela, parece que ele nunca foi executado; como todas as tabelas listam 0 tuplas vivos / mortos, e não há históricos visíveis de vazios ou análises.
Scott Herbert
developer.postgresql.org/pgdocs/postgres/hot-standby.html - 25.5.2. Manipulação de conflitos de consulta - "A aplicação de um registro de limpeza a vácuo do WAL entra em conflito com transações em espera cujos snapshots ainda podem" ver "qualquer uma das linhas a serem removidas ............. Isso parece sugerir que VACUUM O WAL está logado e, portanto, é um "sim" para a minha pergunta.Eu gostaria de obter mais informações de um guru do PG!
Scott Herbert
Espera-se que os dados das visualizações dinâmicas sejam diferentes no primário e no modo de espera. Essas visualizações usam funções do sistema para coletar os dados, e essas funções lêem os dados das estruturas de dados na memória, e não de uma tabela física. Por exemplo, executar um ANALYZE no primário também atualizará as estatísticas do otimizador (usadas para o planejamento de consultas) no modo de espera, mas o tempo em que o ANALYZE foi executado na tabela não será refletido nas pg_stat_user_tables, pois essas informações não estão registradas na transação Histórico.
Gurjeet Singh
Portanto, a conclusão é que o AUTOVACUUM que ocorre no mestre não tem nenhum efeito sobre o escravo, certo? Supondo que esse seja o caso, se eu tiver uma tabela que NÃO possui atualizações / exclusões, apenas inserções, seria possível desativar o vácuo automático no mestre, já que estou escrevendo e as leituras acontecem no escravo.
Henley Chiu

Respostas:

16

O vácuo e o autovacuum são replicados como qualquer outra operação de gravação. (Bem, eles são obviamente um tanto especiais internamente, mas no que diz respeito à sua pergunta, são operações normais de gravação.) A execução de vácuo ou vácuo automático no escravo não faz nada e não é necessária.

Peter Eisentraut
fonte