diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 349d94a5e6..2af0832e50 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1574,7 +1574,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) PredicateLockTwoPhaseFinish(xid, isCommit); /* Count the prepared xact as committed or aborted */ - AtEOXact_PgStat(isCommit); + AtEOXact_PgStat(isCommit, false); /* * And now we can clean up any files we may have left. diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 4cf5ffeedb..c97862e7dc 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2164,7 +2164,7 @@ CommitTransaction(void) AtEOXact_Files(true); AtEOXact_ComboCid(); AtEOXact_HashTables(true); - AtEOXact_PgStat(true); + AtEOXact_PgStat(true, is_parallel_worker); AtEOXact_Snapshot(true, false); AtEOXact_ApplyLauncher(true); pgstat_report_xact_timestamp(0); @@ -2656,7 +2656,7 @@ AbortTransaction(void) AtEOXact_Files(false); AtEOXact_ComboCid(); AtEOXact_HashTables(false); - AtEOXact_PgStat(false); + AtEOXact_PgStat(false, is_parallel_worker); AtEOXact_ApplyLauncher(false); pgstat_report_xact_timestamp(0); } diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index b8bad60a30..9a3864f0b0 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -2050,18 +2050,22 @@ pgstat_update_heap_dead_tuples(Relation rel, int delta) * ---------- */ void -AtEOXact_PgStat(bool isCommit) +AtEOXact_PgStat(bool isCommit, bool parallel) { PgStat_SubXactStatus *xact_state; - /* - * Count transaction commit or abort. (We use counters, not just bools, - * in case the reporting message isn't sent right away.) - */ - if (isCommit) - pgStatXactCommit++; - else - pgStatXactRollback++; + /* Don't count parallel worker transaction stats */ + if (!parallel) + { + /* + * Count transaction commit or abort. (We use counters, not just + * bools, in case the reporting message isn't sent right away.) + */ + if (isCommit) + pgStatXactCommit++; + else + pgStatXactRollback++; + } /* * Transfer transactional insert/update counts into the base tabstat diff --git a/src/include/pgstat.h b/src/include/pgstat.h index be2f59239b..19d75ccdda 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -1324,7 +1324,7 @@ extern void pgstat_init_function_usage(FunctionCallInfoData *fcinfo, extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize); -extern void AtEOXact_PgStat(bool isCommit); +extern void AtEOXact_PgStat(bool isCommit, bool parallel); extern void AtEOSubXact_PgStat(bool isCommit, int nestDepth); extern void AtPrepare_PgStat(void);