AFAICT, base backups running on the replication protocol are always
reported as "idle" in pg_stat_activity. This seems to have been an
oversight in the "include walsender backends in pg_stat_activity" in 10,
which does include it for walsenders in general, just not for the ones
sending base backups. (and was then improved on later with the "include all
non-standard backends" patch).
Unlike the regular walsender it also has to set it back to IDLE, since you
can actually finish a base backup without disconnecting.
PFA a patch that fixes this. I think this is bugfix-for-backpatch, I don't
think it has a large risk of breaking things. Thoughts?
Also, in setting this, there is no real way to differentiate between a
regular walsender and a basebackup walsender, other than looking at the
wait events. They're both listed as walsenders. Should there be? (That
might not be as easily backpatchable, so keeping that as a separate one)
--
Magnus Hagander
Me: https://www.hagander.net/ <http://www.hagander.net/>
Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
index 05ca95bac2..9fc031b141 100644
--- a/src/backend/replication/basebackup.c
+++ b/src/backend/replication/basebackup.c
@@ -697,6 +697,9 @@ SendBaseBackup(BaseBackupCmd *cmd)
WalSndSetState(WALSNDSTATE_BACKUP);
+ /* Report to pgstat that this process is running */
+ pgstat_report_activity(STATE_RUNNING, NULL);
+
if (update_process_title)
{
char activitymsg[50];
@@ -707,6 +710,8 @@ SendBaseBackup(BaseBackupCmd *cmd)
}
perform_base_backup(&opt);
+
+ pgstat_report_activity(STATE_IDLE, NULL);
}
static void