È possibile limitare il timeout sul server Postgres?


16

Ho impostato il timeout di connessione e comando su 10 minuti nella mia applicazione (lato client).

Quindi la mia applicazione esegue una semplice query: SELECT pg_sleep(65)

Su alcuni server funziona bene, ma altri server chiudono la connessione dopo 60 secondi.

Potrebbe trattarsi di una sorta di configurazione del server PostgreSQL che limita i timeout e ignora le impostazioni del mio client?


Per visualizzare il timeout corrente:SHOW statement_timeout;
Utente

Risposte:


26

Si è possibile

Ci sono due impostazioni menzionate nei documenti ( idle_in_transaction_session_timeoutè una novità della versione 9.6x)

  • statement_timeout (numero intero)

    Annullare qualsiasi istruzione che richiede più del numero specificato di millisecondi, a partire dal momento in cui il comando arriva al server dal client. Se log_min_error_statement è impostato su ERRORE o inferiore, verrà registrata anche la dichiarazione scaduta. Un valore pari a zero (impostazione predefinita) lo disattiva.

    L'impostazione di statement_timeout in postgresql.conf non è consigliata perché influirebbe su tutte le sessioni.

  • idle_in_transaction_session_timeout (numero intero)

    Termina qualsiasi sessione con una transazione aperta che è rimasta inattiva per più della durata specificata in millisecondi. Ciò consente di sbloccare tutti i blocchi detenuti da quella sessione e riutilizzare lo slot di connessione; consente inoltre di aspirare le tuple visibili solo a questa transazione. Vedere la Sezione 24.1 per maggiori dettagli al riguardo.

    Il valore predefinito 0 disabilita questa funzione.

È importante non impostare ilstatement_timeout in postgresql.conf a meno che non si desideri divertirsi.

Ecco un esempio del suo funzionamento

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

Nessuna delle impostazioni è presente nel file di configurazione, quindi sto usando le impostazioni predefinite. :( Altre idee?
Andrzej Gis,

@gisek certo, potrebbe essere qualcosa a livello di rete, nello stack IP locale o nel firewall.
Evan Carroll,

4

Non fuori dalla scatola. Sarebbe piuttosto facile compilare un server personalizzato che ignorasse le tue impostazioni.

Ma è molto più probabile che le tue connessioni vengano interrotte da un firewall o gateway a cui non piacciono le connessioni inattive.

Se hai accesso al file di registro del server, questo dovrebbe fornire un buon indizio. Se il client dice che il server ha chiuso la connessione in modo imprevisto e il server dice che il client ha chiuso la connessione in modo imprevisto, è probabilmente qualcosa tra il client e il server che sta effettivamente interrompendo la connessione.


E 'sicuramente non è una consuetudine compilato Server - solo roba regolare da apt-get. Potresti per favore elaborare più informazioni su firewall e lead gateway? Come posso verificarlo e ripararlo?
Andrzej Gis,

-2

Sì, è possibile. Esistono alcuni parametri di connessione che è necessario impostare.

Si prega di fare riferimento al link qui sotto. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout


2
Queste sono le impostazioni per il lato client di una connessione al database e non quelle che possono essere configurate sul server per disconnettere un client. OP sta cercando le impostazioni di timeout della connessione sul lato server.
John aka hot2use,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.