Re: idle_in_transaction_timeout

From: David G Johnston <david(dot)g(dot)johnston(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: idle_in_transaction_timeout
Date: 2014-06-03 18:32:45
Message-ID: 1401820365463-5805904.post@n5.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Vik Fearing wrote
> On 06/03/2014 03:30 PM, Abhijit Menon-Sen wrote:
>> At 2014-06-03 15:06:11 +0200,

> vik.fearing@

> wrote:
>>> This patch implements a timeout for broken clients that idle in
>>> transaction.
>> I think this is a nice feature, but I suggest that (at the very least)
>> the GUC should be named "idle_transaction_timeout".
>
> I prefer the way I have it, but not enough to put up a fight if other
> people like your version better.
>
>>> +
> <para>
>>> + Terminate any session that is idle in transaction for longer
>>> than the specified
>>> + number of seconds. This not only allows any locks to be
>>> released, but also allows
>>> + the connection slot to be reused. However, aborted idle in
>>> transaction sessions
>>> + are not affected. A value of zero (the default) turns this
>>> off.
>>> +
> </para>
>> I suggest:
>>
>> Terminate any session with an open transaction that has been idle
>> for longer than the specified duration in seconds. This allows any
>> locks to be released and the connection slot to be reused.
>>
>> It's not clear to me what "However, aborted idle in transaction sessions
>> are not affected" means.
>>
>> The default value of 0 means that such sessions will not be
>> terminated.
>
> How about this?
>
> Terminate any session with an open transaction that has been idle
> for longer than the specified duration in seconds. This allows any
> locks to be released and the connection slot to be reused.
>
> Sessions in the state "idle in transaction (aborted)" occupy a
> connection slot but because they hold no locks, they are not
> considered by this parameter.
>
> The default value of 0 means that such sessions will not be
> terminated.
> --
> Vik

I do not see any reason for an aborted idle in transaction session to be
treated differently.

Given the similarity to "statement_timeout" using similar wording for both
would be advised.

*Statement Timeout:*
"Abort any statement that takes more than the specified number of
milliseconds, starting from the time the command arrives at the server from
the client. If log_min_error_statement is set to ERROR or lower, the
statement that timed out will also be logged. A value of zero (the default)
turns this off.

Setting statement_timeout in postgresql.conf is not recommended because it
would affect all sessions."

*Idle Transaction Timeout:*

> Disconnect any session that has been "idle in transaction" (including
> aborted) for more than the specified number of milliseconds, starting from
> {however such is determined}.
>
> A value of zero (the default) turns this off.
>
> Typical usage would be to set this to a small positive number in
> postgresql.conf and require sessions that expect long-running, idle,
> transactions to set it back to zero or some reasonable higher value.

While seconds is the better unit of measure I don't think that justifies
making this different from statement_timeout. In either case users can
specify their own units.

Since we are killing the entire session, not just the transaction, a better
label would:

idle_transaction_session_timeout

David J.

--
View this message in context: http://postgresql.1045698.n5.nabble.com/idle-in-transaction-timeout-tp5805859p5805904.html
Sent from the PostgreSQL - hackers mailing list archive at Nabble.com.

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2014-06-03 19:08:15 Re: Hide 'Execution time' in EXPLAIN (COSTS OFF)
Previous Message Andres Freund 2014-06-03 18:05:48 Hide 'Execution time' in EXPLAIN (COSTS OFF)