Transaction Timeout

Hallo!

Ich verwende 8.2, und arbeite im Springframework (mit jdbc-Treiber) mit Transaktionen (und connectionPool).

Nun habe ich folgendes Problem:

  • Wo wird der Default Transaction Timeout definiert?

Zum Thema timeout finde ich in der Spring-Doku folgendes:

The transaction timeout defaults to the default timeout of the underlying transaction system, or or none if timeouts are not supported.

Nur ist es schwierig, in dem “underlying transaction system” rauszufinden, was der default ist. (Im Springframework ist es der Wert -1)

In der PostgreSQL-Doku finde ich den statement_timeout (integer) - default “0”, d.h. es gilt kein timeout.

Im springframework JdbcTemplate gibt es setQueryTimeout, bei der Connection den connection timeout, etc…

Aber - ich kann den default Transactionstimeout in keiner Doku finden
und weiss auch nicht, auf welcher Schicht der definiert wird.

Und: was wären denn sinnvolle Werte? (ist klar, wenn viele statements in der Transaktion laufen, muss er grösser sein…).
Kommt der TA-timeout hauptsächlich zum tragen, wenn Daten durch andere Transactionen gelockt sind, oder an welche Szenarien muss ich da denken?

  • wenn die Connection verschwindet o.ä. kann man ja eh´ von der Clientseite kein Rollback anstossen - Verstehe ich das richtig? Was passiert in dem Fall eigentlich?
    Gibt es sowas wie client-timeout, d.h. wenn eine Transaction offen ist, der Client aber abstürzt, wird die Connection wieder freigegeben?
    Sollten die restlichen default-timeouts ok sein, oder empfiehlt es sich, auf bestimmte genau draufzuschauen?

Danke für jede Hilfe…

Laut Bruce M. in Re: transaction timeout haben wir kein TX-timeout.


  • wenn die Connection verschwindet o.ä. kann man ja eh´ von der Clientseite kein Rollback anstossen - Verstehe ich das richtig? Was passiert in dem Fall eigentlich?

Der Server rollt es zurück.

Gibt es sowas wie client-timeout, d.h. wenn eine Transaction offen ist, der Client aber abstürzt, wird die Connection wieder freigegeben?

Ja. Wirklich steuerbar ist das aber IIRC nicht. Tom Lane meint dazu:

“If network connectivity to the client is lost the kernel will time out and close the connection. The length of the keepalive timeout is kernel-dependent but should be an hour or more in RFC-compliant implementations.”

(Varlena, LLC | PostgreSQL General Bits Newsletter)

Sollten die restlichen default-timeouts ok sein, oder empfiehlt es sich, auf bestimmte genau draufzuschauen?

Sie sollten.

Andreas