Refresh autovacuum costs while waiting for parallel workers. Commit 1ff3180ca01 made a parallel autovacuum leader propagate changes to the cost-based delay parameters to its workers only from vacuum_delay_point(), which it no longer reaches once it is waiting in WaitForParallelWorkersToFinish(). While waiting, the leader neither processed a config reload nor noticed a change in the number of autovacuum workers sharing the cost limit, so its workers kept running with stale parameters until they finished.
Fix by refreshing and propagating the parameters on every wakeup of that wait loop, and by setting the latches of the balanced autovacuum workers when their count changes so that a waiting leader wakes up. A regression test will be added in a separate commit. Backpatch to v19, where parallel autovacuum was introduced. Reported-by: Nikolay Samokhvalov <[email protected]> Author: Bharath Rupireddy <[email protected]> Reviewed-by: Manu <[email protected]> Reviewed-by: Zsolt Parragi <[email protected]> Reviewed-by: Daniel Gustafsson <[email protected]> Reviewed-by: Masahiko Sawada <[email protected]> Discussion: https://postgr.es/m/CAM527d-GL=jp2ejxbsnvbgpk-4xezwwof5cv8p0hghs_og6...@mail.gmail.com Backpatch-through: 19 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/42e96cf2fe095c822f76bc94669ea875cb1e3351 Modified Files -------------- src/backend/access/transam/parallel.c | 11 +++++++++++ src/backend/commands/vacuumparallel.c | 35 +++++++++++++++++++++++++++++++++++ src/backend/postmaster/autovacuum.c | 25 +++++++++++++++++++++++++ src/include/commands/vacuum.h | 1 + 4 files changed, 72 insertions(+)
