pgsql: Consolidate docs for vacuum-related GUCs in new subsection
Consolidate docs for vacuum-related GUCs in new subsection
GUCs related to vacuum's freezing behavior were documented in a
subsection of the Client Connection Defaults documentation. These GUCs
don't belong there, as they affect the freezing behavior of all vacuums
-- including autovacuums.
There wasn't a clear alternative location, so this commit makes a new
"Server Configuration" docs subsection, "Vacuuming", with a subsection
for "Freezing". It also moves the "Automatic Vacuuming" subsection and
the docs on GUCs controlling cost-based vacuum delay under the new
"Vacuuming" subsection.
The other vacuum-related GUCs under the "Resource Consumption"
subsection have been left in their current location, as they seem to fit
there.
The GUCs' documentation was largely lifted and shifted. The only
modification made was the addition of a few missing <literal> tags.
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Discussion: /messages/by-id/flat/CAAKRu_aQUOaMYrcjNuXeSkJtaX9oRUzKP57bsYbC0gVVWS+cbA@mail.gmail.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/ca9c6a5680d7c7dece0f7209ee7ce20c9dfe0840
Modified Files
--------------
doc/src/sgml/config.sgml | 1254 ++++++++++++++++++++++++----------------------
1 file changed, 643 insertions(+), 611 deletions(-)
On 2025-Jan-10, Melanie Plageman wrote:
Consolidate docs for vacuum-related GUCs in new subsection
Hmm, doesn't this need a corresponding rearrangement of the
postgresql.conf.sample file and the GUC grouping in guc_tables.c/h?
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Los cuentos de hadas no dan al niño su primera idea sobre los monstruos.
Lo que le dan es su primera idea de la posible derrota del monstruo."
(G. K. Chesterton)
On 11 Jan 2025, at 10:02, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
On 2025-Jan-10, Melanie Plageman wrote:
Consolidate docs for vacuum-related GUCs in new subsection
Hmm, doesn't this need a corresponding rearrangement of the
postgresql.conf.sample file
That's a good point.
and the GUC grouping in guc_tables.c/h?
I don't know what our policy around this is, and maybe the backpatching hazard
isn't too bad here, but it doesn't entirely seem worth the churn.
--
Daniel Gustafsson
Daniel Gustafsson <daniel@yesql.se> writes:
On 11 Jan 2025, at 10:02, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
and the GUC grouping in guc_tables.c/h?
I don't know what our policy around this is, and maybe the backpatching hazard
isn't too bad here, but it doesn't entirely seem worth the churn.
I think the entire point of that categorization is to line up with the
docs, so our policy should be to fix this.
regards, tom lane
Thanks to Álvaro for pointing this out. I didn't think of it.
On Sun, Jan 12, 2025 at 2:21 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Daniel Gustafsson <daniel@yesql.se> writes:
On 11 Jan 2025, at 10:02, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
and the GUC grouping in guc_tables.c/h?
I don't know what our policy around this is, and maybe the backpatching hazard
isn't too bad here, but it doesn't entirely seem worth the churn.I think the entire point of that categorization is to line up with the
docs, so our policy should be to fix this.
I wrote a patch to reorder postgresql.conf.sample. But when I started
looking at guc_tables.c, it doesn't seem like those are grouped
according to the current docs order. Part of this is because some of
the GUCs have different data types. But this appears to be more than
that. For example, in master guc_tables.c,
autovacuum_vacuum_cost_limit and vacuum_cost_limit are together (in
docs in master they were in different sub-sections). Is guc_tables.c
meant to be consistent with the ordering in the docs?
- Melanie
On Mon, Jan 13, 2025 at 10:22 AM Melanie Plageman
<melanieplageman@gmail.com> wrote:
Thanks to Álvaro for pointing this out. I didn't think of it.
On Sun, Jan 12, 2025 at 2:21 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Daniel Gustafsson <daniel@yesql.se> writes:
On 11 Jan 2025, at 10:02, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
and the GUC grouping in guc_tables.c/h?
I don't know what our policy around this is, and maybe the backpatching hazard
isn't too bad here, but it doesn't entirely seem worth the churn.I think the entire point of that categorization is to line up with the
docs, so our policy should be to fix this.I wrote a patch to reorder postgresql.conf.sample. But when I started
looking at guc_tables.c, it doesn't seem like those are grouped
according to the current docs order. Part of this is because some of
the GUCs have different data types. But this appears to be more than
that. For example, in master guc_tables.c,
autovacuum_vacuum_cost_limit and vacuum_cost_limit are together (in
docs in master they were in different sub-sections). Is guc_tables.c
meant to be consistent with the ordering in the docs?
Since I didn't hear back about this and I don't see an obvious
alternative reorganization in guc_tables.c, I plan to just push the
attached patch that updates only postgresql.conf.sample.
- Melanie
Attachments:
v1-0001-Reorder-vacuum-GUCs-in-postgresql.conf.sample-to-.patchapplication/octet-stream; name=v1-0001-Reorder-vacuum-GUCs-in-postgresql.conf.sample-to-.patchDownload
From 1403192bb470533e48a19999f6701d7ec81741fd Mon Sep 17 00:00:00 2001
From: Melanie Plageman <melanieplageman@gmail.com>
Date: Mon, 13 Jan 2025 10:12:27 -0500
Subject: [PATCH v1] Reorder vacuum GUCs in postgresql.conf.sample to match
docs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
ca9c6a5680d consolidated most of vacuum-related GUCs' documentation into
a new subsection. It neglected, however, to reorganize
postgresql.conf.sample to match the new order. Do this now.
Reported-by: Álvaro Herrera
Discussion: https://postgr.es/m/202501110902.5banlseavz7c%40alvherre.pgsql
---
src/backend/utils/misc/postgresql.conf.sample | 34 +++++++++++--------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index b2bc43383db..079efa1baa7 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -185,14 +185,6 @@
#max_files_per_process = 1000 # min 64
# (change requires restart)
-# - Cost-Based Vacuum Delay -
-
-#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
-#vacuum_cost_page_hit = 1 # 0-10000 credits
-#vacuum_cost_page_miss = 2 # 0-10000 credits
-#vacuum_cost_page_dirty = 20 # 0-10000 credits
-#vacuum_cost_limit = 200 # 1-10000 credits
-
# - Background Writer -
#bgwriter_delay = 200ms # 10-10000ms between rounds
@@ -656,9 +648,11 @@
#------------------------------------------------------------------------------
-# AUTOVACUUM
+# VACUUMING
#------------------------------------------------------------------------------
+# - Automatic Vacuuming -
+
#autovacuum = on # Enable autovacuum subprocess? 'on'
# requires track_counts to also be on.
autovacuum_worker_slots = 16 # autovacuum worker slots to allocate
@@ -688,6 +682,22 @@ autovacuum_worker_slots = 16 # autovacuum worker slots to allocate
# autovacuum, -1 means use
# vacuum_cost_limit
+# - Cost-Based Vacuum Delay -
+
+#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
+#vacuum_cost_page_hit = 1 # 0-10000 credits
+#vacuum_cost_page_miss = 2 # 0-10000 credits
+#vacuum_cost_page_dirty = 20 # 0-10000 credits
+#vacuum_cost_limit = 200 # 1-10000 credits
+
+# - Freezing -
+
+#vacuum_freeze_table_age = 150000000
+#vacuum_freeze_min_age = 50000000
+#vacuum_failsafe_age = 1600000000
+#vacuum_multixact_freeze_table_age = 150000000
+#vacuum_multixact_freeze_min_age = 5000000
+#vacuum_multixact_failsafe_age = 1600000000
#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
@@ -722,12 +732,6 @@ autovacuum_worker_slots = 16 # autovacuum worker slots to allocate
#lock_timeout = 0 # in milliseconds, 0 is disabled
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
#idle_session_timeout = 0 # in milliseconds, 0 is disabled
-#vacuum_freeze_table_age = 150000000
-#vacuum_freeze_min_age = 50000000
-#vacuum_failsafe_age = 1600000000
-#vacuum_multixact_freeze_table_age = 150000000
-#vacuum_multixact_freeze_min_age = 5000000
-#vacuum_multixact_failsafe_age = 1600000000
#bytea_output = 'hex' # hex, escape
#xmlbinary = 'base64'
#xmloption = 'content'
--
2.45.2
On 2025-Jan-13, Melanie Plageman wrote:
Since I didn't hear back about this and I don't see an obvious
alternative reorganization in guc_tables.c, I plan to just push the
attached patch that updates only postgresql.conf.sample.
Apologies, I was very unclear -- I didn't want to talk about the
ordering of entries in the code, but the categorization. See the
config_group_names list in guc_tables.c, which defines some groups.
Each setting belongs into a group, and those groups correspond to what
the sample config file lists as section/subsection titles and to the
grouping in the docs. Also, this categorization affects how the entries
are listed in the pg_settings view and in "postgres --describe-config",
which feed from the same tables.
Perhaps with your changes (assuming I read your commit message right),
we need new groups:
VACUUMING
VACUUMING_FREEZING
VACUUMING_AUTOVACUUM
Thanks
--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"Doing what he did amounts to sticking his fingers under the hood of the
implementation; if he gets his fingers burnt, it's his problem." (Tom Lane)
On Mon, Jan 13, 2025 at 3:46 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
On 2025-Jan-13, Melanie Plageman wrote:
Since I didn't hear back about this and I don't see an obvious
alternative reorganization in guc_tables.c, I plan to just push the
attached patch that updates only postgresql.conf.sample.Apologies, I was very unclear -- I didn't want to talk about the
ordering of entries in the code, but the categorization. See the
config_group_names list in guc_tables.c, which defines some groups.
Each setting belongs into a group, and those groups correspond to what
the sample config file lists as section/subsection titles and to the
grouping in the docs. Also, this categorization affects how the entries
are listed in the pg_settings view and in "postgres --describe-config",
which feed from the same tables.
Oh dear, I had no idea that these categories existed. I suppose I
never paid attention to the category column in pg_settings nor used
--describe-config. Attached is a patch to fix this. I checked both
pg_settings and --describe-config output, and it seems to work.
I'm quite sorry about the extra noise this is causing (especially for
people with patch sets requiring rebasing).
Perhaps with your changes (assuming I read your commit message right),
we need new groups:
VACUUMING
VACUUMING_FREEZING
VACUUMING_AUTOVACUUM
I've gone with VACUUM_AUTOVACUUM, VACUUM_COST_DELAY, and
VACUUM_FREEZING, but I am open to feedback.
- Melanie
Attachments:
v1-0001-Synchronize-guc_tables.c-categories-with-vacuum-d.patchapplication/octet-stream; name=v1-0001-Synchronize-guc_tables.c-categories-with-vacuum-d.patchDownload
From 47f3275712d07d5c4f9973e45010040add584845 Mon Sep 17 00:00:00 2001
From: Melanie Plageman <melanieplageman@gmail.com>
Date: Mon, 13 Jan 2025 17:22:50 -0500
Subject: [PATCH v1] Synchronize guc_tables.c categories with vacuum docs
categories
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
ca9c6a5680d consolidated most of the vacuum-related GUCs' documentation
into a new subsection. af2317652d5daf8b then enforced this order in
postgresql.conf.sample. This commit reorganizes the GUC groups in
guc_tables.c/h to match the updated ordering in the docs.
Reported-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/202501132046.m4mcvxxswznu%40alvherre.pgsql
---
src/backend/utils/misc/guc_tables.c | 55 +++++++++++++++--------------
src/include/utils/guc_tables.h | 5 +--
2 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index c9d8cd796a8..38cb9e970d5 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -681,7 +681,6 @@ const char *const config_group_names[] =
[RESOURCES_MEM] = gettext_noop("Resource Usage / Memory"),
[RESOURCES_DISK] = gettext_noop("Resource Usage / Disk"),
[RESOURCES_KERNEL] = gettext_noop("Resource Usage / Kernel Resources"),
- [RESOURCES_VACUUM_DELAY] = gettext_noop("Resource Usage / Cost-Based Vacuum Delay"),
[RESOURCES_BGWRITER] = gettext_noop("Resource Usage / Background Writer"),
[RESOURCES_ASYNCHRONOUS] = gettext_noop("Resource Usage / Asynchronous Behavior"),
[WAL_SETTINGS] = gettext_noop("Write-Ahead Log / Settings"),
@@ -705,7 +704,9 @@ const char *const config_group_names[] =
[PROCESS_TITLE] = gettext_noop("Reporting and Logging / Process Title"),
[STATS_MONITORING] = gettext_noop("Statistics / Monitoring"),
[STATS_CUMULATIVE] = gettext_noop("Statistics / Cumulative Query and Index Statistics"),
- [AUTOVACUUM] = gettext_noop("Autovacuum"),
+ [VACUUM_AUTOVACUUM] = gettext_noop("Vacuuming / Automatic Vacuuming"),
+ [VACUUM_COST_DELAY] = gettext_noop("Vacuuming / Cost-Based Vacuum Delay"),
+ [VACUUM_FREEZING] = gettext_noop("Vacuuming / Freezing"),
[CLIENT_CONN_STATEMENT] = gettext_noop("Client Connection Defaults / Statement Behavior"),
[CLIENT_CONN_LOCALE] = gettext_noop("Client Connection Defaults / Locale and Formatting"),
[CLIENT_CONN_PRELOAD] = gettext_noop("Client Connection Defaults / Shared Library Preloading"),
@@ -1499,7 +1500,7 @@ struct config_bool ConfigureNamesBool[] =
},
{
- {"autovacuum", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Starts the autovacuum subprocess."),
NULL
},
@@ -2583,7 +2584,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_cost_page_hit", PGC_USERSET, RESOURCES_VACUUM_DELAY,
+ {"vacuum_cost_page_hit", PGC_USERSET, VACUUM_COST_DELAY,
gettext_noop("Vacuum cost for a page found in the buffer cache."),
NULL
},
@@ -2593,7 +2594,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_cost_page_miss", PGC_USERSET, RESOURCES_VACUUM_DELAY,
+ {"vacuum_cost_page_miss", PGC_USERSET, VACUUM_COST_DELAY,
gettext_noop("Vacuum cost for a page not found in the buffer cache."),
NULL
},
@@ -2603,7 +2604,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_cost_page_dirty", PGC_USERSET, RESOURCES_VACUUM_DELAY,
+ {"vacuum_cost_page_dirty", PGC_USERSET, VACUUM_COST_DELAY,
gettext_noop("Vacuum cost for a page dirtied by vacuum."),
NULL
},
@@ -2613,7 +2614,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_cost_limit", PGC_USERSET, RESOURCES_VACUUM_DELAY,
+ {"vacuum_cost_limit", PGC_USERSET, VACUUM_COST_DELAY,
gettext_noop("Vacuum cost amount available before napping."),
NULL
},
@@ -2623,7 +2624,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"autovacuum_vacuum_cost_limit", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_cost_limit", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Vacuum cost amount available before napping, for autovacuum."),
NULL
},
@@ -2734,7 +2735,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_freeze_min_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_freeze_min_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Minimum age at which VACUUM should freeze a table row."),
NULL
},
@@ -2744,7 +2745,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_freeze_table_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_freeze_table_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Age at which VACUUM should scan whole table to freeze tuples."),
NULL
},
@@ -2754,7 +2755,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_multixact_freeze_min_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_multixact_freeze_min_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Minimum age at which VACUUM should freeze a MultiXactId in a table row."),
NULL
},
@@ -2764,7 +2765,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_multixact_freeze_table_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_multixact_freeze_table_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Multixact age at which VACUUM should scan whole table to freeze tuples."),
NULL
},
@@ -2774,7 +2775,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"vacuum_failsafe_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_failsafe_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Age at which VACUUM should trigger failsafe to avoid a wraparound outage."),
NULL
},
@@ -2783,7 +2784,7 @@ struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
- {"vacuum_multixact_failsafe_age", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ {"vacuum_multixact_failsafe_age", PGC_USERSET, VACUUM_FREEZING,
gettext_noop("Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage."),
NULL
},
@@ -3407,7 +3408,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"autovacuum_naptime", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_naptime", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Time to sleep between autovacuum runs."),
NULL,
GUC_UNIT_S
@@ -3417,7 +3418,7 @@ struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
- {"autovacuum_vacuum_threshold", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Minimum number of tuple updates or deletes prior to vacuum."),
NULL
},
@@ -3426,7 +3427,7 @@ struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
- {"autovacuum_vacuum_insert_threshold", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_insert_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums."),
NULL
},
@@ -3435,7 +3436,7 @@ struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
- {"autovacuum_analyze_threshold", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_analyze_threshold", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Minimum number of tuple inserts, updates, or deletes prior to analyze."),
NULL
},
@@ -3445,7 +3446,7 @@ struct config_int ConfigureNamesInt[] =
},
{
/* see varsup.c for why this is PGC_POSTMASTER not PGC_SIGHUP */
- {"autovacuum_freeze_max_age", PGC_POSTMASTER, AUTOVACUUM,
+ {"autovacuum_freeze_max_age", PGC_POSTMASTER, VACUUM_AUTOVACUUM,
gettext_noop("Age at which to autovacuum a table to prevent transaction ID wraparound."),
NULL
},
@@ -3457,7 +3458,7 @@ struct config_int ConfigureNamesInt[] =
},
{
/* see multixact.c for why this is PGC_POSTMASTER not PGC_SIGHUP */
- {"autovacuum_multixact_freeze_max_age", PGC_POSTMASTER, AUTOVACUUM,
+ {"autovacuum_multixact_freeze_max_age", PGC_POSTMASTER, VACUUM_AUTOVACUUM,
gettext_noop("Multixact age at which to autovacuum a table to prevent multixact wraparound."),
NULL
},
@@ -3467,7 +3468,7 @@ struct config_int ConfigureNamesInt[] =
},
{
/* see max_connections */
- {"autovacuum_worker_slots", PGC_POSTMASTER, AUTOVACUUM,
+ {"autovacuum_worker_slots", PGC_POSTMASTER, VACUUM_AUTOVACUUM,
gettext_noop("Sets the number of backend slots to allocate for autovacuum workers."),
NULL
},
@@ -3476,7 +3477,7 @@ struct config_int ConfigureNamesInt[] =
NULL, NULL, NULL
},
{
- {"autovacuum_max_workers", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_max_workers", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Sets the maximum number of simultaneously running autovacuum worker processes."),
NULL
},
@@ -3941,7 +3942,7 @@ struct config_real ConfigureNamesReal[] =
},
{
- {"vacuum_cost_delay", PGC_USERSET, RESOURCES_VACUUM_DELAY,
+ {"vacuum_cost_delay", PGC_USERSET, VACUUM_COST_DELAY,
gettext_noop("Vacuum cost delay in milliseconds."),
NULL,
GUC_UNIT_MS
@@ -3952,7 +3953,7 @@ struct config_real ConfigureNamesReal[] =
},
{
- {"autovacuum_vacuum_cost_delay", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_cost_delay", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Vacuum cost delay in milliseconds, for autovacuum."),
NULL,
GUC_UNIT_MS
@@ -3963,7 +3964,7 @@ struct config_real ConfigureNamesReal[] =
},
{
- {"autovacuum_vacuum_scale_factor", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_scale_factor", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Number of tuple updates or deletes prior to vacuum as a fraction of reltuples."),
NULL
},
@@ -3973,7 +3974,7 @@ struct config_real ConfigureNamesReal[] =
},
{
- {"autovacuum_vacuum_insert_scale_factor", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_vacuum_insert_scale_factor", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Number of tuple inserts prior to vacuum as a fraction of reltuples."),
NULL
},
@@ -3983,7 +3984,7 @@ struct config_real ConfigureNamesReal[] =
},
{
- {"autovacuum_analyze_scale_factor", PGC_SIGHUP, AUTOVACUUM,
+ {"autovacuum_analyze_scale_factor", PGC_SIGHUP, VACUUM_AUTOVACUUM,
gettext_noop("Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples."),
NULL
},
diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h
index 65a46b8565c..3f18ff451ef 100644
--- a/src/include/utils/guc_tables.h
+++ b/src/include/utils/guc_tables.h
@@ -63,7 +63,6 @@ enum config_group
RESOURCES_MEM,
RESOURCES_DISK,
RESOURCES_KERNEL,
- RESOURCES_VACUUM_DELAY,
RESOURCES_BGWRITER,
RESOURCES_ASYNCHRONOUS,
WAL_SETTINGS,
@@ -87,7 +86,9 @@ enum config_group
PROCESS_TITLE,
STATS_MONITORING,
STATS_CUMULATIVE,
- AUTOVACUUM,
+ VACUUM_AUTOVACUUM,
+ VACUUM_COST_DELAY,
+ VACUUM_FREEZING,
CLIENT_CONN_STATEMENT,
CLIENT_CONN_LOCALE,
CLIENT_CONN_PRELOAD,
--
2.45.2
Hi!
On 14.01.2025 01:35, Melanie Plageman wrote:
On Mon, Jan 13, 2025 at 3:46 PM Alvaro Herrera<alvherre@alvh.no-ip.org> wrote:
On 2025-Jan-13, Melanie Plageman wrote:
Since I didn't hear back about this and I don't see an obvious
alternative reorganization in guc_tables.c, I plan to just push the
attached patch that updates only postgresql.conf.sample.Apologies, I was very unclear -- I didn't want to talk about the
ordering of entries in the code, but the categorization. See the
config_group_names list in guc_tables.c, which defines some groups.
Each setting belongs into a group, and those groups correspond to what
the sample config file lists as section/subsection titles and to the
grouping in the docs. Also, this categorization affects how the entries
are listed in the pg_settings view and in "postgres --describe-config",
which feed from the same tables.Oh dear, I had no idea that these categories existed. I suppose I
never paid attention to the category column in pg_settings nor used
--describe-config. Attached is a patch to fix this. I checked both
pg_settings and --describe-config output, and it seems to work.I'm quite sorry about the extra noise this is causing (especially for
people with patch sets requiring rebasing).Perhaps with your changes (assuming I read your commit message right),
we need new groups:
VACUUMING
VACUUMING_FREEZING
VACUUMING_AUTOVACUUMI've gone with VACUUM_AUTOVACUUM, VACUUM_COST_DELAY, and
VACUUM_FREEZING, but I am open to feedback.
Looks good and convenient, thanks for the patch!
I noticed another guc autovacuum_work_mem, which belongs more to the
autovacuum category in my opinion, although it belongs to RESOURCES_MEM,
but in fact, only autovacuum uses it.
--
Regards,
Alena Rybakina
Postgres Professional
On 2025-Jan-13, Melanie Plageman wrote:
I've gone with VACUUM_AUTOVACUUM, VACUUM_COST_DELAY, and
VACUUM_FREEZING, but I am open to feedback.
Looks good to me. I checked these two queries, whose results appear
correct:
55432 18devel 560655=# select name, category from pg_settings where category ilike '%vacuum%';
name │ category
───────────────────────────────────────┼─────────────────────────────────────
autovacuum │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_max_workers │ Vacuuming / Automatic Vacuuming
autovacuum_multixact_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_naptime │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_delay │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_limit │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_worker_slots │ Vacuuming / Automatic Vacuuming
vacuum_cost_delay │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_limit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_dirty │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_hit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_miss │ Vacuuming / Cost-Based Vacuum Delay
vacuum_failsafe_age │ Vacuuming / Freezing
vacuum_freeze_min_age │ Vacuuming / Freezing
vacuum_freeze_table_age │ Vacuuming / Freezing
vacuum_multixact_failsafe_age │ Vacuuming / Freezing
vacuum_multixact_freeze_min_age │ Vacuuming / Freezing
vacuum_multixact_freeze_table_age │ Vacuuming / Freezing
55432 18devel 560655=# select name, category from pg_settings where (short_desc ilike '%vacuum%' or extra_desc ilike '%vacuum%') and category not ilike '%vacuum%';
name │ category
─────────────────────────────┼─────────────────────────────────────
autovacuum_work_mem │ Resource Usage / Memory
log_autovacuum_min_duration │ Reporting and Logging / What to Log
maintenance_work_mem │ Resource Usage / Memory
vacuum_buffer_usage_limit │ Resource Usage / Memory
--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"That sort of implies that there are Emacs keystrokes which aren't obscure.
I've been using it daily for 2 years now and have yet to discover any key
sequence which makes any sense." (Paul Thomas)
On Tue, Jan 14, 2025 at 1:21 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
On 2025-Jan-13, Melanie Plageman wrote:
I've gone with VACUUM_AUTOVACUUM, VACUUM_COST_DELAY, and
VACUUM_FREEZING, but I am open to feedback.Looks good to me. I checked these two queries, whose results appear
correct:55432 18devel 560655=# select name, category from pg_settings where category ilike '%vacuum%';
name │ category
───────────────────────────────────────┼─────────────────────────────────────
autovacuum │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_max_workers │ Vacuuming / Automatic Vacuuming
autovacuum_multixact_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_naptime │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_delay │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_limit │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_worker_slots │ Vacuuming / Automatic Vacuuming
vacuum_cost_delay │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_limit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_dirty │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_hit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_miss │ Vacuuming / Cost-Based Vacuum Delay
vacuum_failsafe_age │ Vacuuming / Freezing
vacuum_freeze_min_age │ Vacuuming / Freezing
vacuum_freeze_table_age │ Vacuuming / Freezing
vacuum_multixact_failsafe_age │ Vacuuming / Freezing
vacuum_multixact_freeze_min_age │ Vacuuming / Freezing
vacuum_multixact_freeze_table_age │ Vacuuming / Freezing55432 18devel 560655=# select name, category from pg_settings where (short_desc ilike '%vacuum%' or extra_desc ilike '%vacuum%') and category not ilike '%vacuum%';
name │ category
─────────────────────────────┼─────────────────────────────────────
autovacuum_work_mem │ Resource Usage / Memory
log_autovacuum_min_duration │ Reporting and Logging / What to Log
maintenance_work_mem │ Resource Usage / Memory
vacuum_buffer_usage_limit │ Resource Usage / Memory
Yea, Alena also mentioned these GUCs that are in different groups. I
think it is okay for these four to remain in their current locations
as their current groupings seem descriptive enough.
- Melanie
On 2025-Jan-14, Melanie Plageman wrote:
On Tue, Jan 14, 2025 at 1:21 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
55432 18devel 560655=# select name, category from pg_settings where (short_desc ilike '%vacuum%' or extra_desc ilike '%vacuum%') and category not ilike '%vacuum%';
name │ category
─────────────────────────────┼─────────────────────────────────────
autovacuum_work_mem │ Resource Usage / Memory
log_autovacuum_min_duration │ Reporting and Logging / What to Log
maintenance_work_mem │ Resource Usage / Memory
vacuum_buffer_usage_limit │ Resource Usage / MemoryYea, Alena also mentioned these GUCs that are in different groups. I
think it is okay for these four to remain in their current locations
as their current groupings seem descriptive enough.
I agree.
--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"No hay ausente sin culpa ni presente sin disculpa" (Prov. francés)
On 14.01.2025 22:01, Melanie Plageman wrote:
On Tue, Jan 14, 2025 at 1:21 PM Alvaro Herrera<alvherre@alvh.no-ip.org> wrote:
On 2025-Jan-13, Melanie Plageman wrote:
I've gone with VACUUM_AUTOVACUUM, VACUUM_COST_DELAY, and
VACUUM_FREEZING, but I am open to feedback.Looks good to me. I checked these two queries, whose results appear
correct:55432 18devel 560655=# select name, category from pg_settings where category ilike '%vacuum%';
name │ category
───────────────────────────────────────┼─────────────────────────────────────
autovacuum │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_analyze_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_max_workers │ Vacuuming / Automatic Vacuuming
autovacuum_multixact_freeze_max_age │ Vacuuming / Automatic Vacuuming
autovacuum_naptime │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_delay │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_cost_limit │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_insert_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_scale_factor │ Vacuuming / Automatic Vacuuming
autovacuum_vacuum_threshold │ Vacuuming / Automatic Vacuuming
autovacuum_worker_slots │ Vacuuming / Automatic Vacuuming
vacuum_cost_delay │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_limit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_dirty │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_hit │ Vacuuming / Cost-Based Vacuum Delay
vacuum_cost_page_miss │ Vacuuming / Cost-Based Vacuum Delay
vacuum_failsafe_age │ Vacuuming / Freezing
vacuum_freeze_min_age │ Vacuuming / Freezing
vacuum_freeze_table_age │ Vacuuming / Freezing
vacuum_multixact_failsafe_age │ Vacuuming / Freezing
vacuum_multixact_freeze_min_age │ Vacuuming / Freezing
vacuum_multixact_freeze_table_age │ Vacuuming / Freezing55432 18devel 560655=# select name, category from pg_settings where (short_desc ilike '%vacuum%' or extra_desc ilike '%vacuum%') and category not ilike '%vacuum%';
name │ category
─────────────────────────────┼─────────────────────────────────────
autovacuum_work_mem │ Resource Usage / Memory
log_autovacuum_min_duration │ Reporting and Logging / What to Log
maintenance_work_mem │ Resource Usage / Memory
vacuum_buffer_usage_limit │ Resource Usage / MemoryYea, Alena also mentioned these GUCs that are in different groups. I
think it is okay for these four to remain in their current locations
as their current groupings seem descriptive enough.
Looking at them, I am willing to agree with you
--
Regards,
Alena Rybakina
Postgres Professional