pgsql: Improve management of statement timeouts.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Improve management of statement timeouts.
Date: 2019-10-25 15:41:23
Message-ID: E1iO1iN-0005Gd-JP@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Improve management of statement timeouts.

Commit f8e5f156b added private state in postgres.c to track whether
a statement timeout is running. This seems like bad design to me;
timeout.c's private state should be the single source of truth about
that. We already fixed one bug associated with failure to keep those
states in sync (cf. be42015fc), and I've got little faith that we
won't find more in future. So get rid of postgres.c's local variable
by exposing a way to ask timeout.c whether a timeout is running.
(Obviously, such an inquiry is subject to race conditions, but it
seems fine for the purpose at hand.)

To make get_timeout_active() as cheap as possible, add a flag in
the per-timeout struct showing whether that timeout is active.
This allows some small savings elsewhere in timeout.c, mainly
elimination of unnecessary searches of the active_timeouts array.

While at it, fix enable_statement_timeout to not call disable_timeout
when statement_timeout is 0 and the timeout is not running. This
avoids a useless deschedule-and-reschedule-timeouts cycle, which
represents a significant savings (at least one kernel call) when
there is any other active timeout. Right now, there usually isn't,
but there are proposals around to change that.

Discussion: https://postgr.es/m/16035-456e6e69ebfd4374@postgresql.org

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/22f6f2c1ccb56e0d6a159d4562418587e4b10e01

Modified Files
--------------
src/backend/tcop/postgres.c | 22 +++++-------------
src/backend/utils/misc/timeout.c | 49 ++++++++++++++++++++++++++--------------
src/include/utils/timeout.h | 1 +
3 files changed, 39 insertions(+), 33 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2019-10-25 16:17:46 pgsql: Get rid of useless/dangerous redefinition of bool in ECPG.
Previous Message Amit Kapila 2019-10-25 09:51:13 Re: pgsql: Make the order of the header file includes consistent in non-bac