PostgreSQL 9: Vider une table sur la réplique primaire sur le miroir?

18

Exécution de PostgreSQL 9.0.1, avec réplication en streaming, gardant une instance miroir en lecture seule à jour. L'auto-vide est activé sur le primaire, à l'exception de quelques tables qui ne sont pas nettoyées par le démon d'auto-vide, afin de réduire les E / S pendant les heures ouvrables. Ces tableaux sont des "vues matérialisées".

Chaque nuit à minuit, nous exécutons un vide dans la base de données afin de nettoyer les tables qui sont exclues de l'auto-vide. Je me demande si ce processus se reproduit sur le miroir, ou si je dois également configurer le vide sur le miroir?

Scott Herbert
la source
1
Excellente question. La réplication en streaming utilise le journal d'écriture anticipée, donc il se résume à savoir si les modifications apportées par VACUUM sont enregistrées ou non.
DerfK
1
Fait intéressant, j'ai activé l'aspirateur automatique sur le miroir en lecture seule, mais en regardant dans les statistiques du tableau, il ne semble pas avoir jamais fonctionné; comme tous les tableaux listent 0 tuples vivants / morts, et il n'y a pas d'historique visible des aspirateurs ou des analyses.
Scott Herbert
developer.postgresql.org/pgdocs/postgres/hot-standby.html - 25.5.2. Gestion des conflits de requêtes - "L'application d'un enregistrement de nettoyage sous vide à partir de conflits WAL avec des transactions de secours dont les instantanés peuvent toujours" voir "n'importe quelle ligne à supprimer ............. Cela semble suggérer que VACUUM est connecté à WAL, et donc c'est un "oui" à ma question. J'adorerais obtenir plus d'informations d'un gourou PG!
Scott Herbert
Les données des vues dynamiques devraient être différentes sur le serveur principal par rapport au serveur de secours. Ces vues utilisent des fonctions système pour collecter les données, et ces fonctions lisent les données à partir de structures de données en mémoire plutôt qu'à partir d'une table physique. Par exemple, effectuer une ANALYSE sur le primaire mettra également à jour les statistiques de l'optimiseur (utilisées pour la planification des requêtes) en veille, mais le temps que l'ANALYSE a été effectué sur la table ne se reflétera pas dans les pg_stat_user_tables car ces informations ne sont pas enregistrées dans la transaction journaux.
Gurjeet Singh
Donc, la conclusion est que AUTOVACUUM se produisant sur le maître n'a aucun effet sur son fonctionnement sur l'esclave, n'est-ce pas? En supposant que c'est le cas, si j'ai une table qui n'a PAS de mises à jour / suppressions, juste des insertions, serait-il possible de désactiver l'autovacuum dans le maître, car je ne fais qu'écrire dessus, et les lectures se produisent sur l'esclave.
Henley Chiu

Réponses:

16

Le vide et le vide automatique se répliquent comme toute autre opération d'écriture. (Eh bien, ils sont évidemment quelque peu spéciaux en interne, mais en ce qui concerne votre question, ce sont des opérations d'écriture normales.) Exécuter le vide ou l'auto-vide sur l'esclave ne fait rien et n'est pas nécessaire.

Peter Eisentraut
la source