PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/12/2016 10:56:17

Shaar
Membre

Vacuum de la base = Vaccum de toutes les tables ?

Bonjour

Je dispose actuellement de 9 bases de données que je souhaiterais fusionner par série de 3. Or cela signifie que je vais passer de 60 tables à environ une centaine avec une augmentation particulièrement conséquente de la taille de ma base complète (100Go à + de 200Go)

Nous réalisons actuellement des VACUUM full hebdomadaire sur chacune des bases + un vacuum full journalier sur les tables les plus sollicitées.

Si nous procédons à cette fusion de nos bases, je crains que l'opération de VACUUM full sur une base deviennent quasiment irréalisable dans un délai acceptable. Ainsi, je voudrais savoir si l'opération de VACUUM full réalisée sur chacune de mes tables équivaut à réaliser un vacuum full sur l'ensemble de ma base.

Merci !

Hors ligne

#2 08/12/2016 11:24:22

gleu
Administrateur

Re : Vacuum de la base = Vaccum de toutes les tables ?

Non, ce n'est pas la même chose. Dans le cas d'un VACUUM FULL d'une base, les tables systèmes sont aussi traitées.

Mais bon, la vraie question est : pourquoi faire un VACUUM FULL périodiquement ? c'est généralement déconseillée. Un VACUUM simple, oui. Un FULL, non. Un FULL n'est intéressant que dans des cas très particuliers.


Guillaume.

Hors ligne

#3 08/12/2016 11:29:17

Shaar
Membre

Re : Vacuum de la base = Vaccum de toutes les tables ?

Nous avons choisi de réaliser des VACUUM full sur la base complète après de nombreuses saturations de notre serveur.

En effet, la taille de plusieurs de nos tables présentent une important volatilité (facteur x10). Ces tables comportant plusieurs centaines de millions d'entrées, nous avons préférés réalisé des VACUUM full plutot que des VACUUM simple.

Hors ligne

#4 21/12/2016 10:14:43

Shaar
Membre

Re : Vacuum de la base = Vaccum de toutes les tables ?

Bonjour,

Je me permets de relancer mon sujet.

Dans quel cas l'utilisation d'un VACUUM full est pertinent ?
Lorsqu'on ne réalise pas de VACUUM full pendant plus de 3 semaines, nos bases saturent. Ainsi, je pense que cette opération se justifie afin de libérer de l'espace mémoire. Néanmoins, est il possible de réaliser un VACUUM full uniquement sur les tables les plus sollicités ? En effet, en cas de fusion de nos bases, le temps de réalisation d'un VACUUM deviendra sans doute particulièrement trop long.

Merci de votre aide

Hors ligne

#5 21/12/2016 10:40:18

gleu
Administrateur

Re : Vacuum de la base = Vaccum de toutes les tables ?

Dans quel cas l'utilisation d'un VACUUM full est pertinent ?

C'est pertinent si on a vidé les trois quart ou les 4/5è de la table. C'est pertinent si on a une inutilisation prolongée de la base (par exemple pour la mise en place d'une nouvelle version applicative). Et c'est à peu près tout.

Lorsqu'on ne réalise pas de VACUUM full pendant plus de 3 semaines, nos bases saturent.

Qu'entendez-vous par saturer ?

Néanmoins, est il possible de réaliser un VACUUM full uniquement sur les tables les plus sollicités ?

Oui. VACUUM FULL table_a_traiter;


Guillaume.

Hors ligne

#6 21/12/2016 10:43:57

rjuju
Administrateur

Re : Vacuum de la base = Vaccum de toutes les tables ?

Bonjour,


Un VACUUM FULL est généralement nécessaire quand la configuration de l'autovacuum n'a pas été correctement effectuée, ou que des VACUUM ne sont pas effectués au bon moment (batch de nuit par exemple).  Concrètement, plutôt que faire un VACUUM FULL, il est plus intéressant de traiter l'origine du problème.  La marche à suivre est grosso modo :

- trouver la liste des tables se fragmentant vite
- trouver la raison de cette fragmentation
- adapter la configuration de l'autovacuum en conséquence, ou déclencher des VACUUM manuels durant des traitements problématiques


Et par configuration de l'autovacuum, j'entends adapter autovacuum_vacuum_scale_factor pour les tables problématiques et/ou augmenter le nombre de worker et/ou augmenter l'agressivité de l'autovacuum.

Hors ligne

#7 21/12/2016 11:02:24

Shaar
Membre

Re : Vacuum de la base = Vaccum de toutes les tables ?

Merci pour les réponses.

Pour vous, il n'est pas nécessaire de réaliser un VACUUM full sur la base mais cela suffit sur les tables ?

Je vais regarder les paramétrages de l'autovacuum.

Lorsqu'on ne réalise pas de VACUUM full pendant plus de 3 semaines, nos bases saturent.

Qu'entendez-vous par saturer ?

On arrive à saturer l'espace mémoire des disques.

Hors ligne

#8 21/12/2016 11:41:49

gleu
Administrateur

Re : Vacuum de la base = Vaccum de toutes les tables ?

On arrive à saturer l'espace mémoire des disques.

Dans ce cas, vous n'exécutez pas suffisamment de VACUUM standard sur vos tables. L'autovacuum n'est certainement pas suffisamment agressif. Ça peut aussi être dû au fait que le VACUUM ne peut pas faire correctement son travail à cause de transactions très longues.


Guillaume.

Hors ligne

#9 21/12/2016 11:48:12

Shaar
Membre

Re : Vacuum de la base = Vaccum de toutes les tables ?

On réalise d'ors et déjà des VACUUM standards chaque jour sur les tables les plus sollicités.

Néanmoins, comme dit au début, certaines ont une très grande volatilité.

cause de transactions très longues.

Qu'entendez vous par transactions très longues ?

Dernière modification par Shaar (21/12/2016 12:02:36)

Hors ligne

#10 21/12/2016 12:25:47

gleu
Administrateur

Re : Vacuum de la base = Vaccum de toutes les tables ?

Des transactions qui durent très logntemps...

BEGIN;
plein de requêtes sur très longtemps
COMMIT;


Guillaume.

Hors ligne

#11 21/12/2016 12:27:41

Shaar
Membre

Re : Vacuum de la base = Vaccum de toutes les tables ?

Je réalise les opérations de VACUUM à un moment où il y a pas de sollicitations sur le serveur.

Hors ligne

Pied de page des forums