]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Apply data-checksum worker throttling parameters
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Wed, 6 May 2026 10:38:12 +0000 (12:38 +0200)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Wed, 6 May 2026 10:38:12 +0000 (12:38 +0200)
The DataChecksumsWorker accepts cost_delay and cost_limit parameters
from pg_enable_data_checksums() so users can throttle the I/O caused
by enabling checksums.  Due to the API for setting the cost parameters
changing between when the code was written, and when it was committed
the new cost update function call was omitted and thus the parameters
were silently ignored.

Fix by calling VacuumUpdateCosts() after assigning the parameters
(both during worker startup and on the runtime cost-update path), and
by leaving the page-cost weights at their GUC-controlled defaults.

Author: Satyanarayana Narlapuram <satyanarlapuram@gmail.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Discussion: https://postgr.es/m/CAHg+QDeevH6aTyWdXYBJW0wOmfoZy66gDi5TfinK_dXeCrHQLg@mail.gmail.com

src/backend/postmaster/datachecksum_state.c

index 2cfb0450877526f16efd7fbafb6d4d7699134e8f..33430147ff29378499cd9c653e6aa95a78b5ad90 100644 (file)
@@ -1549,14 +1549,14 @@ DataChecksumsWorkerMain(Datum arg)
         * provides rather than inventing something bespoke. This is an internal
         * implementation detail and care should be taken to avoid it bleeding
         * through to the user to avoid confusion.
+        *
+        * VacuumUpdateCosts() propagates the values to the variables actually
+        * read by vacuum_delay_point().
         */
        VacuumCostDelay = DataChecksumState->cost_delay;
        VacuumCostLimit = DataChecksumState->cost_limit;
-       VacuumCostActive = (VacuumCostDelay > 0);
+       VacuumUpdateCosts();
        VacuumCostBalance = 0;
-       VacuumCostPageHit = 0;
-       VacuumCostPageMiss = 0;
-       VacuumCostPageDirty = 0;
 
        /*
         * Create and set the vacuum strategy as our buffer strategy.
@@ -1613,7 +1613,7 @@ DataChecksumsWorkerMain(Datum arg)
                        costs_updated = true;
                        VacuumCostDelay = DataChecksumState->launch_cost_delay;
                        VacuumCostLimit = DataChecksumState->launch_cost_limit;
-                       VacuumCostActive = (VacuumCostDelay > 0);
+                       VacuumUpdateCosts();
 
                        DataChecksumState->cost_delay = DataChecksumState->launch_cost_delay;
                        DataChecksumState->cost_limit = DataChecksumState->launch_cost_limit;