Hello, While investigating on a bloat issue with a colleague, we found that if a bgworker executes some queries with SPI, the statistic changes will never be reported, since pgstat_report_stat() is only called in regular backends.
In our case, the bgworker is the only process inserting and deleting a large amount of data on some tables, so the autovacuum never tried to do any maintenance on these tables. Should a bgworker modifing data have to call pgstat_report_stat() to avoid this problem? I don't find any documentation suggesting it, and it seems that worker_spi (used as a template for this bgworker and I suppose a lot of other one) is also affected. If yes, I think at least worker_spi should be fixed (patched attached). Regards. -- Julien Rouhaud http://dalibo.com - http://dalibo.org
diff --git a/src/test/modules/worker_spi/worker_spi.c b/src/test/modules/worker_spi/worker_spi.c index 314e371..7c9a3eb 100644 --- a/src/test/modules/worker_spi/worker_spi.c +++ b/src/test/modules/worker_spi/worker_spi.c @@ -292,6 +292,7 @@ worker_spi_main(Datum main_arg) SPI_finish(); PopActiveSnapshot(); CommitTransactionCommand(); + pgstat_report_stat(false); pgstat_report_activity(STATE_IDLE, NULL); }
-- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers