pgsql: Fix performance regression from session statistics.

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix performance regression from session statistics.
Date: 2021-09-16 09:12:57
Message-ID: E1mQnRx-00028d-Ky@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix performance regression from session statistics.

Session statistics, as introduced by 960869da08, had several shortcomings:

- an additional GetCurrentTimestamp() call that also impaired the accuracy of
the data collected

This can be avoided by passing the current timestamp we already have in
pgstat_report_stat().

- an additional statistics UDP packet sent every 500ms

This is solved by adding the new statistics to PgStat_MsgTabstat.
This is conceptually ugly, because session statistics are not
table statistics. But the struct already contains data unrelated
to tables, so there is not much damage done.

Connection and disconnection are reported in separate messages, which
reduces the number of additional messages to two messages per session and a
slight increase in PgStat_MsgTabstat size (but the same number of table
stats fit).

- Session time computation could overflow on systems where long is 32 bit.

Reported-By: Andres Freund <andres(at)anarazel(dot)de>
Author: Andres Freund <andres(at)anarazel(dot)de>
Author: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
Discussion: https://postgr.es/m/20210801205501.nyxzxoelqoo4x2qc%40alap3.anarazel.de
Backpatch: 14-, where the feature was introduced.

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/7890a423470b3a763aa22faf69a44cb6a2df8f0e

Modified Files
--------------
src/backend/postmaster/pgstat.c | 195 ++++++++++++++++++----------
src/backend/tcop/postgres.c | 2 +
src/backend/utils/activity/backend_status.c | 4 +-
src/include/pgstat.h | 34 +++--
src/tools/pgindent/typedefs.list | 3 +-
5 files changed, 158 insertions(+), 80 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2021-09-16 10:23:20 pgsql: process startup: Do InitProcess() at the same time regardless of
Previous Message Andres Freund 2021-09-16 09:12:54 pgsql: Fix performance regression from session statistics.