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 17/07/2018 18:32:53

Indaa
Membre

Delete too long

Bonjour,

J'ai testé la suppression de 35k rows sur une table "table_lob" , résultat 3h30 !!! c'est vraiment trop long et j'aimerai comprendre pourquoi  smile

Le contexte :

- Sur la table "table_lob" il y a un trigger qui fait :  AFTER DELETE ON table_lob FOR EACH ROW EXECUTE PROCEDURE delete_lo()
- Un autovaccum (prevent wraparound) en cours sur la table pg_largeobjet

Je pense que le trigger y est pour quelques chose , et j'aimerai savoir si l'autovacuum sur pg_largeobject a aussi des conséquences sur le temps du Delete ?
Je suis aussi ouvert à toute proposition pour améliorer mon temps de suppression.

Merci d'avance

Hors ligne

#2 17/07/2018 21:49:18

gleu
Administrateur

Re : Delete too long

Oui, l'autovacuum a des conséquences sur la durée du delete. Dans le cas d'un VACUUM pour wraparound, la table complète est réécrite, donc je suppose que ce VACUUM a bloqué temporairement l'exécution de la fonction trigger, et du coup le DELETE.


Guillaume.

Hors ligne

#3 18/07/2018 10:31:24

Indaa
Membre

Re : Delete too long

Merci Guillaume,

Du coup le jour J j'aimerai :
- cancel cet autovacuum qui tourne depuis très longtemps
- delete les rows de ma table "table_lob"
- Puis lancer un Vacuumfull sur pg_largeobjet

J'aimerai savoir si tu as une solution pour empêcher un autovacuum(prevent wraparound) de se déclancher ???

Merci

Hors ligne

#4 18/07/2018 10:42:24

gleu
Administrateur

Re : Delete too long

Vous ne pouvez pas annuler un autovacuum en mode wraparound (ou plus exactement, il se ré-exécutera immédiatement après). Et donc non, pas de solution pour empêcher un "autovacuum(prevent wraparound)". Il ne faut surtout pas le faire, ce serait très dangereux. Mais de toute façon, ce mode sur l'autovacuum est très rare.


Guillaume.

Hors ligne

Pied de page des forums