Re: shared-memory based stats collector - v67 - Mailing list pgsql-hackers
From | Kyotaro Horiguchi |
---|---|
Subject | Re: shared-memory based stats collector - v67 |
Date | |
Msg-id | 20220323.163833.1929400812667041796.horikyota.ntt@gmail.com Whole thread Raw |
In response to | Re: shared-memory based stats collector - v67 (Kyotaro Horiguchi <horikyota.ntt@gmail.com>) |
Responses |
Re: shared-memory based stats collector - v67
|
List | pgsql-hackers |
At Tue, 22 Mar 2022 11:56:40 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in > Docs.. Yeah I'll try it. This is the first cut, based on the earlier patchset. monitoring.sgml: > When using the statistics to monitor collected data, it is important I failed to read this clearly. I modified the part assuming that it means "the statistics" means "the statistics views and functions". I didn't mention pgstat_force_next_flush() since I think it is a developer-only feature. In the attached diff, I refrained to reindent for easy review. regards. -- Kyotaro Horiguchi NTT Open Source Software Center From 855456e68e1ddc5cec0a05f9604e257061de56ca Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Date: Tue, 22 Mar 2022 18:48:43 +0900 Subject: [PATCH] doc_wip --- doc/src/sgml/catalogs.sgml | 6 +- doc/src/sgml/config.sgml | 10 +-- doc/src/sgml/func.sgml | 4 +- doc/src/sgml/glossary.sgml | 39 +++++------ doc/src/sgml/high-availability.sgml | 6 +- doc/src/sgml/maintenance.sgml | 2 +- doc/src/sgml/monitoring.sgml | 103 ++++++++++++++-------------- doc/src/sgml/ref/pg_dump.sgml | 2 +- 8 files changed, 84 insertions(+), 88 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 2a8cd02664..21aebfddc0 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -9507,9 +9507,9 @@ SCRAM-SHA-256$<replaceable><iteration count></replaceable>:<replaceable>&l <para> <xref linkend="view-table"/> lists the system views described here. More detailed documentation of each view follows below. - There are some additional views that provide access to the results of - the statistics collector; they are described in <xref - linkend="monitoring-stats-views-table"/>. + There are some additional views that provide access to the activity + statistics; they are described in + <xref linkend="monitoring-stats-views-table"/>. </para> <para> diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 7a48973b3c..a2e468a727 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7752,12 +7752,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; <sect1 id="runtime-config-statistics"> <title>Run-time Statistics</title> - <sect2 id="runtime-config-statistics-collector"> - <title>Query and Index Statistics Collector</title> + <sect2 id="runtime-config-activity-statitics"> + <title>Query and Index Activity Statistics</title> <para> - These parameters control server-wide statistics collection features. - When statistics collection is enabled, the data that is produced can be + These parameters control server-wide activity statistics facility. + When statistics facility is enabled, the data that is produced can be accessed via the <structname>pg_stat</structname> and <structname>pg_statio</structname> family of system views. Refer to <xref linkend="monitoring"/> for more information. @@ -7773,7 +7773,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; </term> <listitem> <para> - Enables the collection of information on the currently + Enables the tracking of the currently executing command of each session, along with its identifier and the time when that command began execution. This parameter is on by default. Note that even when enabled, this information is not diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 8a802fb225..a681641162 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -25451,8 +25451,8 @@ SELECT collation for ('foo' COLLATE "de_DE"); <para> Requests to log the memory contexts of the backend with the specified process ID. This function can send the request to - backends and auxiliary processes except logger and statistics - collector. These memory contexts will be logged at + backends and auxiliary processes except logger. These memory contexts + will be logged at <literal>LOG</literal> message level. They will appear in the server log based on the log configuration set (See <xref linkend="runtime-config-logging"/> for more information), diff --git a/doc/src/sgml/glossary.sgml b/doc/src/sgml/glossary.sgml index 1835d0e65a..2215f8ad7d 100644 --- a/doc/src/sgml/glossary.sgml +++ b/doc/src/sgml/glossary.sgml @@ -7,6 +7,22 @@ </para> <glosslist> + <glossentry id="glossary-activity-statistics"> + <glossterm>Activity statistics facility</glossterm> + <glossdef> + <para> + A facility which, if enabled, collects statistical information + about the <glossterm linkend="glossary-instance">instance</glossterm>'s + activities. + </para> + <para> + For more information, see + <xref linkend="monitoring-stats"/>. + </para> + </glossdef> + </glossentry> + + <glossentry id="glossary-acid"> <glossterm>ACID</glossterm> <glossdef> @@ -136,9 +152,9 @@ The auxiliary processes consist of <!-- in alphabetical order --> <!-- NB: In the code, the autovac launcher doesn't use the auxiliary process scaffolding; however it does behave as one so we list it - here anyway. In addition, logger and stats collector aren't - connected to shared memory so most code outside postmaster.c - doesn't even consider them "procs" in the first place. + here anyway. In addition, logger isn't connected to shared memory so + most code outside postmaster.c doesn't even consider them "procs" in + the first place. --> the <glossterm linkend="glossary-autovacuum">autovacuum launcher</glossterm> (but not the autovacuum workers), @@ -146,7 +162,6 @@ the <glossterm linkend="glossary-checkpointer">checkpointer</glossterm>, the <glossterm linkend="glossary-logger">logger</glossterm>, the <glossterm linkend="glossary-startup-process">startup process</glossterm>, - the <glossterm linkend="glossary-stats-collector">statistics collector</glossterm>, the <glossterm linkend="glossary-wal-archiver">WAL archiver</glossterm>, the <glossterm linkend="glossary-wal-receiver">WAL receiver</glossterm> (but not the <glossterm linkend="glossary-wal-sender">WAL senders</glossterm>), @@ -1563,22 +1578,6 @@ </glossdef> </glossentry> - <glossentry id="glossary-stats-collector"> - <glossterm>Stats collector (process)</glossterm> - <glossdef> - <para> - An <glossterm linkend="glossary-auxiliary-proc">auxiliary process</glossterm> - which, if enabled, receives statistical information - about the <glossterm linkend="glossary-instance">instance</glossterm>'s - activities. - </para> - <para> - For more information, see - <xref linkend="monitoring-stats"/>. - </para> - </glossdef> - </glossentry> - <glossentry id="glossary-system-catalog"> <glossterm>System catalog</glossterm> <glossdef> diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index 81fa26f985..5d0b37dfed 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -2227,12 +2227,12 @@ HINT: You can then restart the server after making the necessary configuration </para> <para> - The statistics collector is active during recovery. All scans, reads, blocks, + The activity statistics facility is active during recovery. All scans, reads, blocks, index usage, etc., will be recorded normally on the standby. Replayed actions will not duplicate their effects on primary, so replaying an insert will not increment the Inserts column of pg_stat_user_tables. - The stats file is deleted at the start of recovery, so stats from primary - and standby will differ; this is considered a feature, not a bug. + So the stats from primary and standby will differ; this is considered a + feature, not a bug. </para> <para> diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 36f975b1e5..507ca594a3 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -799,7 +799,7 @@ vacuum insert threshold = vacuum base insert threshold + vacuum insert scale fac it may be beneficial to lower the table's <xref linkend="reloption-autovacuum-freeze-min-age"/> as this may allow tuples to be frozen by earlier vacuums. The number of obsolete tuples and - the number of inserted tuples are obtained from the statistics collector; + the number of inserted tuples are obtained from the activity statistics facility; it is a semi-accurate count updated by each <command>UPDATE</command>, <command>DELETE</command> and <command>INSERT</command> operation. (It is only semi-accurate because some information might be lost under heavy diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 028f5d676b..f2457e8cb3 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -22,7 +22,7 @@ <para> Several tools are available for monitoring database activity and analyzing performance. Most of this chapter is devoted to describing - <productname>PostgreSQL</productname>'s statistics collector, + <productname>PostgreSQL</productname>'s activity statistics facility, but one should not neglect regular Unix monitoring programs such as <command>ps</command>, <command>top</command>, <command>iostat</command>, and <command>vmstat</command>. Also, once one has identified a @@ -53,7 +53,6 @@ postgres 15554 0.0 0.0 57536 1184 ? Ss 18:02 0:00 postgres: back postgres 15555 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: checkpointer postgres 15556 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: walwriter postgres 15557 0.0 0.0 58504 2244 ? Ss 18:02 0:00 postgres: autovacuum launcher -postgres 15558 0.0 0.0 17512 1068 ? Ss 18:02 0:00 postgres: stats collector postgres 15582 0.0 0.0 58772 3080 ? Ss 18:04 0:00 postgres: joe runbug 127.0.0.1 idle postgres 15606 0.0 0.0 58772 3052 ? Ss 18:07 0:00 postgres: tgl regression [local] SELECT waiting postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl regression [local] idle in transaction @@ -63,11 +62,10 @@ postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl platforms, as do the details of what is shown. This example is from a recent Linux system.) The first process listed here is the primary server process. The command arguments - shown for it are the same ones used when it was launched. The next five + shown for it are the same ones used when it was launched. The next four processes are background worker processes automatically launched by the - primary process. (The <quote>stats collector</quote> process will not be present - if you have set the system not to start the statistics collector; likewise - the <quote>autovacuum launcher</quote> process can be disabled.) + primary process. (The <quote>autovacuum launcher</quote> process will not + be present if you have set the system not to run autovacuum.) Each of the remaining processes is a server process handling one client connection. Each such process sets its command line display in the form @@ -130,16 +128,16 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser </sect1> <sect1 id="monitoring-stats"> - <title>The Statistics Collector</title> + <title>The Activity Statistics Facility</title> <indexterm zone="monitoring-stats"> <primary>statistics</primary> </indexterm> <para> - <productname>PostgreSQL</productname>'s <firstterm>statistics collector</firstterm> + <productname>PostgreSQL</productname>'s <firstterm>activity statistics facility</firstterm> is a subsystem that supports collection and reporting of information about - server activity. Presently, the collector can count accesses to tables + server activity. Presently, the facility can count accesses to tables and indexes in both disk-block and individual-row terms. It also tracks the total number of rows in each table, and information about vacuum and analyze actions for each table. It can also count calls to user-defined @@ -151,7 +149,7 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser information about exactly what is going on in the system right now, such as the exact command currently being executed by other server processes, and which other connections exist in the system. This facility is independent - of the collector process. + of the activity statistics facility. </para> <sect2 id="monitoring-stats-setup"> @@ -172,7 +170,7 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <para> The parameter <xref linkend="guc-track-counts"/> controls whether - statistics are collected about table and index accesses. + activity statistics are collected about table and index accesses. </para> <para> @@ -201,18 +199,15 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser </para> <para> - The statistics collector transmits the collected information to other - <productname>PostgreSQL</productname> processes through temporary files. - These files are stored in the directory named by the - <xref linkend="guc-stats-temp-directory"/> parameter, - <filename>pg_stat_tmp</filename> by default. - For better performance, <varname>stats_temp_directory</varname> can be - pointed at a RAM-based file system, decreasing physical I/O requirements. + The activity statistics facility collects information in shared + memory area. Every <productname>PostgreSQL</productname> process collects + activity statistics locally then writes out the summarized data to the + shared memory area with appropriate intervals. When the server shuts down cleanly, a permanent copy of the statistics data is stored in the <filename>pg_stat</filename> subdirectory, so that statistics can be retained across server restarts. When recovery is - performed at server start (e.g., after immediate shutdown, server crash, - and point-in-time recovery), all statistics counters are reset. + performed at server start (e.g., after immediate shutdown, server crash), + all statistics counters are reset. </para> </sect2> @@ -226,19 +221,19 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser the current state of the system. There are also several other views, listed in <xref linkend="monitoring-stats-views-table"/>, available to show the results - of statistics collection. Alternatively, one can - build custom views using the underlying statistics functions, as discussed - in <xref linkend="monitoring-stats-functions"/>. + of activity statistics collection. Alternatively, one can + build custom views using the underlying activity statistics functions, as + discussed in <xref linkend="monitoring-stats-functions"/>. </para> <para> - When using the statistics to monitor collected data, it is important + When using the activity statistics views and functions to monitor collected data, it is important to realize that the information does not update instantaneously. - Each individual server process transmits new statistical counts to - the collector just before going idle; so a query or transaction still in - progress does not affect the displayed totals. Also, the collector itself - emits a new report at most once per <varname>PGSTAT_STAT_INTERVAL</varname> - milliseconds (500 ms unless altered while building the server). So the + Each individual server process writes out new statistical counts to + the shared memory area just before going idle but not frequently than once + per <varname>PGSTAT_MIN_INTERVAL</varname> milliseconds (10 seconds unless + altered while building the server); so a query or transaction still in + progress does not affect the displayed totals and the displayed information lags behind actual activity. However, current-query information collected by <varname>track_activities</varname> is always up-to-date. @@ -246,22 +241,23 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <para> Another important point is that when a server process is asked to display - any of these statistics, it first fetches the most recent report emitted by - the collector process and then continues to use this snapshot for all - statistical views and functions until the end of its current transaction. - So the statistics will show static information as long as you continue the - current transaction. Similarly, information about the current queries of - all sessions is collected when any such information is first requested - within a transaction, and the same information will be displayed throughout - the transaction. - This is a feature, not a bug, because it allows you to perform several - queries on the statistics and correlate the results without worrying that - the numbers are changing underneath you. But if you want to see new - results with each query, be sure to do the queries outside any transaction - block. Alternatively, you can invoke - <function>pg_stat_clear_snapshot</function>(), which will discard the - current transaction's statistics snapshot (if any). The next use of - statistical information will cause a new snapshot to be fetched. + any of these activity statistics, it fetches the status-quo values in the + shared memory area every time. So the result can vary every time fetching + a same item even during a transaction. This is a feature, not a bug, for + the reason that generally these values don't need transactional consistency + and they are prefered to be as fresh as possible. If needed, transactional + consistency is available by + setting <varname>stats_fetch_consistency</varname> + to <literal>snapshot</literal> or <literal>cache</literal>. When it is set + to <literal>snapshot</literal>, a consistent snapshot through all items is + created at the first fetch to any item and consequent fetches use the + snapshot, which persists until the transaction ends. When it is set + to <literal>cache</literal>, the value for an item is individually cached + at the first fetch and the cached value persists until the transaction + ends. You can invoke <function>pg_stat_clear_snapshot</function>() to + discard the current transaction's statistics snapshot (if any) anytime. + The next use of statistical information will cause a new snapshot or a new + cache to be fetched. </para> <para> @@ -1110,10 +1106,6 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <entry><literal>LogicalLauncherMain</literal></entry> <entry>Waiting in main loop of logical replication launcher process.</entry> </row> - <row> - <entry><literal>PgStatMain</literal></entry> - <entry>Waiting in main loop of statistics collector process.</entry> - </row> <row> <entry><literal>RecoveryWalStream</literal></entry> <entry>Waiting in main loop of startup process for WAL to arrive, during @@ -1889,6 +1881,10 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser </thead> <tbody> + <row> + <entry><literal>ActivityStatistics</literal></entry> + <entry>Waiting to write out activity statistics to shared memory.</entry> + </row> <row> <entry><literal>AddinShmemInit</literal></entry> <entry>Waiting to manage an extension's space allocation in shared @@ -5082,7 +5078,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i </para> <para> - Additional functions related to statistics collection are listed in <xref + Additional functions related to the activity statistics facility are listed in <xref linkend="monitoring-stats-funcs-table"/>. </para> @@ -5152,7 +5148,7 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i <returnvalue>void</returnvalue> </para> <para> - Discards the current statistics snapshot. + Discards the current statistics snapshot or cached information. </para></entry> </row> @@ -6313,8 +6309,9 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, <entry> <command>VACUUM</command> is performing final cleanup. During this phase, <command>VACUUM</command> will vacuum the free space map, update statistics - in <literal>pg_class</literal>, and report statistics to the statistics - collector. When this phase is completed, <command>VACUUM</command> will end. + in <literal>pg_class</literal>, and report statistics to the activity + statistics facility. + When this phase is completed, <command>VACUUM</command> will end. </entry> </row> </tbody> diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 2f0042fd96..64d4d997c7 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -1328,7 +1328,7 @@ PostgreSQL documentation <para> The database activity of <application>pg_dump</application> is - normally collected by the statistics collector. If this is + normally collected by the activity statistics facility. If this is undesirable, you can set parameter <varname>track_counts</varname> to false via <envar>PGOPTIONS</envar> or the <literal>ALTER USER</literal> command. -- 2.27.0
pgsql-hackers by date: