pg_upgrade: Retrieve subscription count more efficiently.
authorNathan Bossart <[email protected]>
Wed, 24 Jul 2024 16:30:33 +0000 (11:30 -0500)
committerNathan Bossart <[email protected]>
Wed, 24 Jul 2024 16:30:33 +0000 (11:30 -0500)
commit364509a2e7f92785407348ec702e39729fda6cf8
tree0631df7a0ad4e35229f59609f05e1a5b0bb329aa
parent9f21482fe189c3b6193e9a7c3c50518a8a805165
pg_upgrade: Retrieve subscription count more efficiently.

Presently, pg_upgrade obtains the number of subscriptions in the
to-be-upgraded cluster by first querying pg_subscription in every
database for the number of subscriptions in only that database.
Then, in count_old_cluster_subscriptions(), it adds all the values
collected in the first step.  This is expensive, especially when
there are many databases.

Fortunately, there is a better way to retrieve the subscription
count.  Since pg_subscription is a shared catalog, we only need to
connect to a single database and query it once.  This commit
modifies pg_upgrade to use that approach, which also allows us to
trim several lines of code.  In passing, move the call to
get_db_subscription_count(), which has been renamed to
get_subscription_count(), from get_db_rel_and_slot_infos() to the
dedicated >= v17 section in check_and_dump_old_cluster().

We may be able to make similar improvements to
get_old_cluster_logical_slot_infos(), but that is left as a future
exercise.

Reviewed-by: Michael Paquier, Amit Kapila
Discussion: https://postgr.es/m/ZprQJv_TxccN3tkr%40nathan
Backpatch-through: 17
src/bin/pg_upgrade/check.c
src/bin/pg_upgrade/info.c
src/bin/pg_upgrade/pg_upgrade.h