Est-il possible de limiter le timeout sur le serveur Postgres?

17

J'ai défini le délai de connexion et de commande sur 10 minutes dans mon application (côté client).

Que mon application exécute une simple requête: SELECT pg_sleep(65)

Sur certains serveurs, cela fonctionne bien, mais d'autres serveurs ferment la connexion après 60 secondes.

Serait-ce une sorte de configuration de serveur PostgreSQL qui limite les délais d'attente et ignore mes paramètres client?

Andrzej Gis
la source
Pour voir le délai actuel:SHOW statement_timeout;
Utilisateur

Réponses:

27

Oui c'est possible

Il y a deux paramètres mentionnés dans les documents ( idle_in_transaction_session_timeoutest nouveau dans la version 9.6x)

  • statement_timeout (entier)

    Abandonnez toute instruction qui prend plus que le nombre de millisecondes spécifié, à partir du moment où la commande arrive sur le serveur à partir du client. Si log_min_error_statement est défini sur ERROR ou inférieur, l'instruction qui a expiré sera également enregistrée. Une valeur de zéro (par défaut) désactive cette option.

    La définition de statement_timeout dans postgresql.conf n'est pas recommandée car elle affecterait toutes les sessions.

  • idle_in_transaction_session_timeout (entier)

    Mettez fin à toute session avec une transaction ouverte qui a été inactive pendant plus longtemps que la durée spécifiée en millisecondes. Cela permet de libérer tous les verrous détenus par cette session et de réutiliser l'emplacement de connexion; il permet également d'aspirer des tuples visibles uniquement pour cette transaction. Voir Section 24.1 pour plus de détails à ce sujet.

    La valeur par défaut de 0 désactive cette fonctionnalité.

Il est important de ne pas définir le statement_timeoutfichier dans postgresql.conf sauf si vous voulez vous amuser.

Voici un exemple de fonctionnement

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout
Evan Carroll
la source
Aucun paramètre n'est présent dans le fichier de configuration, donc j'utilise les valeurs par défaut. :( Avez-vous d'autres idées?
Andrzej Gis
@gisek bien sûr, cela pourrait être quelque chose au niveau du réseau, soit dans votre pile IP locale, soit sur le pare-feu.
Evan Carroll,
4

Pas hors de la boîte. Il serait cependant assez facile de compiler un serveur personnalisé qui ignorerait vos paramètres.

Mais il est beaucoup plus probable que vos connexions soient interrompues par un pare-feu ou une passerelle qui n'aime pas les connexions inactives.

Si vous avez accès au fichier journal du serveur, cela devrait donner un bon indice. Si le client dit que le serveur a fermé la connexion de manière inattendue et que le serveur a dit que le client a fermé la connexion de manière inattendue, alors c'est probablement quelque chose entre le client et le serveur qui coupe réellement la connexion.

jjanes
la source
Ce n'est certainement pas un serveur compilé personnalisé - juste des trucs réguliers d'apt-get. Pourriez-vous s'il vous plaît élaborer plus de fils de pare-feu et de passerelle? Comment puis-je le vérifier et le réparer?
Andrzej Gis
-2

Oui c'est possible. Vous devez définir certains paramètres de connexion.

Veuillez vous référer au lien ci-dessous. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout

Kavita Patil
la source
2
Ce sont des paramètres pour le côté client d'une connexion de base de données et non des paramètres qui peuvent être configurés sur le serveur pour déconnecter un client. OP recherche des paramètres de délai de connexion côté serveur.
John aka hot2use