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 21/06/2018 15:37:27

mortimer.pw
Membre

User pour Sauvegarde

Bonjour,
Je travaille sur des moteurs entre 9.3 et 10.1 sous Cent-OS 6/7.
Ce week-end un petit problème avec une BDD (lock sur une table).
En cascade, de nombreux Users bloqués, mon export journalier (pg_dump) et un vacuum full hebdo bloqués.
Lundi matin en arrivant, je veux me connecter à la base pour voir qui bloque et là le drame : FATAL:  sorry, too many clients already
Vilain petit canard que je suis, j'utilise le superuser par défaut pour l'export et le vacuum, superuser_reserved_connections = 3, PAS BIEN.
Je prends donc le sujet au sérieux, j'ai vu sur le net que beaucoup pratique ceci pour un User spécifique sauvegarde :
     CREATE USER backadm SUPERUSER  password '<PASS>';
     ALTER USER backadm set default_transaction_read_only = on;
Est-ce la bonne pratique ?
J'imagine que l'on ne peut pas utiliser le même User pour la restauration ? donc superuser (différent du par défaut) ?
Et même problématique pour le vacuum full ?
D'avance merci pour vos éclaircissements.

Hors ligne

#2 21/06/2018 17:50:05

rjuju
Administrateur

Re : User pour Sauvegarde

Le paramètre superuser_reserved_connections est commun pour tous les utilisateurs ayant le privilège SUPERUSER, donc y compris votre nouvel utilisateur.  Voyez plutôt pour augmenter ce paramètre (et peut être augmenter le nombre maximum de connexions si l'utilisation standard approche les 97 connexions).

Hors ligne

#3 11/07/2018 13:17:39

mortimer.pw
Membre

Re : User pour Sauvegarde

Bonjour,
Désolé pour la réponse tardive, j'étais sur une urgence.
Le problème c'est que j'utilise le superuser pour mes exports journaliers et mon vacuum hebdomadaire mis en crontab.
Donc si jamais un client lock une table, le vacuum va bloquer, les exports aussi, si c'est pendant un week-end prolongé par exemple, je peux vite arriver à 5-6 connexions utilisées et plus possible d'accéder à la base en rentrant du week-end.
Est-ce la meilleure solution ?
Ne vaut-il mieux pas créer un user avec les droits adéquats pour les exports et vacuum ?

Hors ligne

#4 11/07/2018 14:47:45

gleu
Administrateur

Re : User pour Sauvegarde

Je ne vois pas en quoi des droits et un utilisateur particulier vont corriger le problème indiqué ici. Un VACUUM FULL a besoin d'un verrou exclusif. Si un verrou est déjà sur la table, il sera bloqué et bloquera tous les prochains utilisateurs de cette table. Si vous voulez garder une marge possible pour vous connecter en superutilisateur, il faut augmenter la valeur du superuser_reserved_connections.


Guillaume.

Hors ligne

#5 11/07/2018 15:02:37

rjuju
Administrateur

Re : User pour Sauvegarde

Et aussi vous pouvez utiliser l'option --lock-wait-timeout de pg_dump (si c'est ce que vous utilisez), pour éviter le problème.  Pensez bien évidemment à vérifier le code retour de pg_dump avant de supprimer les anciennes sauvegardes.

Hors ligne

#6 11/07/2018 15:13:48

mortimer.pw
Membre

Re : User pour Sauvegarde

Rebonjour,
Guillaume : Je pensais qu'en utilisant un autre User, je préserverais les connexions superuser.
Julien : ok, merci pour l'option.

Hors ligne

#7 11/07/2018 15:21:19

gleu
Administrateur

Re : User pour Sauvegarde

Le VACUUM FULL ne prend qu'une connexion, et les exports (pg_dump ?) ne doivent pas en prendre beaucoup. Du coup, ce sont les autres connexions qui vont gêner.


Guillaume.

Hors ligne

#8 11/07/2018 16:34:24

mortimer.pw
Membre

Re : User pour Sauvegarde

Une pour le vacuum.
Quatre pour les exports (oui pg_dump et pg_dumpall), si long week-end.
Je vais donc réserver 6 superuser_reserved_connections.
Merci.

Hors ligne

Pied de page des forums