Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

Started by Lakshmi N5 days ago5 messageshackers
Jump to latest
#1Lakshmi N
lakshmin.jhs@gmail.com

Hi hackers,

I noticed CFI is missing while scanning pg_class for RELKIND_RELATION and
RELKIND_TOASTVALUE. On a database with several thousands of tables, these
scans can take a noticeable amount of time. Attached a patch to address
this.

Regards,
Lakshmi

Attachments:

0001-autovacuum-cfi.patchapplication/octet-stream; name=0001-autovacuum-cfi.patchDownload+4-0
#2Dapeng Wang
wangdp20191008@gmail.com
In reply to: Lakshmi N (#1)
Re: Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

Lakshmi N <lakshmin.jhs@gmail.com> 于2026年4月10日周五 16:39写道:

Hi hackers,

I noticed CFI is missing while scanning pg_class for RELKIND_RELATION and
RELKIND_TOASTVALUE. On a database with several thousands of tables, these
scans can take a noticeable amount of time. Attached a patch to address
this.

Regards,
Lakshmi

Hi Lakshmi,

The patch applies cleanly to HEAD and compiles without warnings.
make check passes (one unrelated ICU collation diff).

The two CHECK_FOR_INTERRUPTS() additions in do_autovacuum() look
correct and are well-placed at the top of each loop iteration,
before any resources are acquired.

I noticed there are other similar catalog scan loops in
autovacuum.c that also lack CHECK_FOR_INTERRUPTS():

- The pg_database scan loop around line 1854
- The pg_class scan loop around line 3664

Should those be covered as well?

Regards,
Dapeng Wang

#3Lakshmi N
lakshmin.jhs@gmail.com
In reply to: Dapeng Wang (#2)
Re: Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

Hi,

On Fri, Apr 10, 2026 at 4:57 AM Dapeng Wang <wangdp20191008@gmail.com>
wrote:

Lakshmi N <lakshmin.jhs@gmail.com> 于2026年4月10日周五 16:39写道:

Hi hackers,

I noticed CFI is missing while scanning pg_class for RELKIND_RELATION and
RELKIND_TOASTVALUE. On a database with several thousands of tables, these
scans can take a noticeable amount of time. Attached a patch to address
this.

Regards,
Lakshmi

Hi Lakshmi,

The patch applies cleanly to HEAD and compiles without warnings.
make check passes (one unrelated ICU collation diff).

The two CHECK_FOR_INTERRUPTS() additions in do_autovacuum() look
correct and are well-placed at the top of each loop iteration,
before any resources are acquired.

I noticed there are other similar catalog scan loops in
autovacuum.c that also lack CHECK_FOR_INTERRUPTS():

- The pg_database scan loop around line 1854
- The pg_class scan loop around line 3664

Should those be covered as well?

Updated the patch covering those two as well.

Regards,
Lakshmi

Show quoted text

Attachments:

v2-0001-Add-CHECK_FOR_INTERRUPTS-in-autovacuum-table-scannin.patchapplication/octet-stream; name=v2-0001-Add-CHECK_FOR_INTERRUPTS-in-autovacuum-table-scannin.patchDownload+8-1
#4Dapeng Wang
wangdp20191008@gmail.com
In reply to: Lakshmi N (#3)
Re: Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

Lakshmi N <lakshmin.jhs@gmail.com> 于2026年4月11日周六 13:02写道:

Hi,

On Fri, Apr 10, 2026 at 4:57 AM Dapeng Wang <wangdp20191008@gmail.com>
wrote:

Lakshmi N <lakshmin.jhs@gmail.com> 于2026年4月10日周五 16:39写道:

Hi hackers,

I noticed CFI is missing while scanning pg_class for RELKIND_RELATION
and RELKIND_TOASTVALUE. On a database with several thousands of tables,
these scans can take a noticeable amount of time. Attached a patch to
address this.

Regards,
Lakshmi

Hi Lakshmi,

The patch applies cleanly to HEAD and compiles without warnings.
make check passes (one unrelated ICU collation diff).

The two CHECK_FOR_INTERRUPTS() additions in do_autovacuum() look
correct and are well-placed at the top of each loop iteration,
before any resources are acquired.

I noticed there are other similar catalog scan loops in
autovacuum.c that also lack CHECK_FOR_INTERRUPTS():

- The pg_database scan loop around line 1854
- The pg_class scan loop around line 3664

Should those be covered as well?

Updated the patch covering those two as well.

Regards,
Lakshmi

Hi Lakshmi,

The updated patch now covers all four catalog scan loops.
Applies cleanly, compiles without warnings, and all 247
regression tests pass.

Regards,
Dapeng Wang

#5Sami Imseih
samimseih@gmail.com
In reply to: Dapeng Wang (#4)
Re: Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

Hi,

It was discussed [1][/messages/by-id/acwTxpz3Toxt0ty8@nathan%5D here if C_F_I is needed in these
do_autovacuum/autovacuum_scores code paths, and it
was decided not to add them.

Also, at least on my tests with 100k evern with 1 million tables, I did
not see a reason to do so. These are catalog scans that should
happen quick enough, even in extreme cases, to not make
this worthwhile.

Others may have another opinion.

--
Sami

[1]: [/messages/by-id/acwTxpz3Toxt0ty8@nathan%5D