Re: Why does [auto-]vacuum delay not report a wait event?
От | Justin Pryzby |
---|---|
Тема | Re: Why does [auto-]vacuum delay not report a wait event? |
Дата | |
Msg-id | 20200321040750.GD13662@telsasoft.com обсуждение исходный текст |
Ответ на | Why does [auto-]vacuum delay not report a wait event? (Andres Freund <andres@anarazel.de>) |
Ответы |
Re: Why does [auto-]vacuum delay not report a wait event?
Re: Why does [auto-]vacuum delay not report a wait event? |
Список | pgsql-hackers |
On Thu, Mar 19, 2020 at 03:44:49PM -0700, Andres Freund wrote: > But uh, unfortunately the vacuum delay code just sleeps without setting > a wait event: ... > Seems like it should instead use a new wait event in the PG_WAIT_TIMEOUT > class? > > Given how frequently we run into trouble with [auto]vacuum throttling > being a problem, and there not being any way to monitor that currently, > that seems like it'd be a significant improvement, given the effort? I see that pg_sleep sets WAIT_EVENT_PG_SLEEP, but pg_usleep doesn't, I guess because the overhead is significant for a small number of usecs, and because it doesn't work for pg_usleep to set a generic event if callers want to be able to set a more specific wait event. Also, I noticed that SLEEP_ON_ASSERT comment (31338352b) wants to use pg_usleep "which seems too short.". Surely it should use pg_sleep, added at 782eefc58 a few years later ? Also, there was a suggestion recently that this should have a separate vacuum_progress phase: |vacuumlazy.c:#define VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL 50 /* ms */ |vacuumlazy.c:pg_usleep(VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL * 1000L); I was planning to look at that eventually ; should it have a wait event instead or in addition ? > It'd probably also be helpful to report the total time [auto]vacuum > spent being delayed for vacuum verbose/autovacuum logging, but imo > that'd be a parallel feature to a wait event, not a replacement. This requires wider changes than I anticipated. 2020-03-20 22:35:51.308 CDT [16534] LOG: automatic aggressive vacuum of table "template1.pg_catalog.pg_class": index scans:1 pages: 0 removed, 11 remain, 0 skipped due to pins, 0 skipped frozen tuples: 6 removed, 405 remain, 0 are dead but not yet removable, oldest xmin: 1574 buffer usage: 76 hits, 7 misses, 8 dirtied avg read rate: 16.378 MB/s, avg write rate: 18.718 MB/s Cost-based delay: 2 msec system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s VACUUM VERBOSE wouldn't normally be run with cost_delay > 0, so that field will typically be zero, so I made it conditional, which is supposedly why it's written like that, even though that's not otherwise being used since 17eaae98. Added at https://commitfest.postgresql.org/28/2515/ -- Justin
Вложения
В списке pgsql-hackers по дате отправления: