Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 036f7d3

Browse files
author
Amit Kapila
committed
Avoid counting transaction stats for parallel worker cooperating
transaction. The transaction that is initiated by the parallel worker to cooperate with the actual transaction started by the main backend to complete the query execution should not be counted as a separate transaction. The other internal transactions started and committed by the parallel worker are still counted as separate transactions as we that is what we do in other places like autovacuum. This will partially fix the bloat in transaction stats due to additional transactions performed by parallel workers. For a complete fix, we need to decide how we want to show all the transactions that are started internally for various operations and that is a matter of separate patch. Reported-by: Haribabu Kommi Author: Haribabu Kommi Reviewed-by: Amit Kapila, Jamison Kirk and Rahila Syed Backpatch-through: 9.6 Discussion: https://postgr.es/m/CAJrrPGc9=jKXuScvNyQ+VNhO0FZk7LLAShAJRyZjnedd2D61EQ@mail.gmail.com
1 parent 47b6362 commit 036f7d3

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

src/backend/access/transam/twophase.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1574,7 +1574,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
15741574
PredicateLockTwoPhaseFinish(xid, isCommit);
15751575

15761576
/* Count the prepared xact as committed or aborted */
1577-
AtEOXact_PgStat(isCommit);
1577+
AtEOXact_PgStat(isCommit, false);
15781578

15791579
/*
15801580
* And now we can clean up any files we may have left.

src/backend/access/transam/xact.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2164,7 +2164,7 @@ CommitTransaction(void)
21642164
AtEOXact_Files(true);
21652165
AtEOXact_ComboCid();
21662166
AtEOXact_HashTables(true);
2167-
AtEOXact_PgStat(true);
2167+
AtEOXact_PgStat(true, is_parallel_worker);
21682168
AtEOXact_Snapshot(true, false);
21692169
AtEOXact_ApplyLauncher(true);
21702170
pgstat_report_xact_timestamp(0);
@@ -2656,7 +2656,7 @@ AbortTransaction(void)
26562656
AtEOXact_Files(false);
26572657
AtEOXact_ComboCid();
26582658
AtEOXact_HashTables(false);
2659-
AtEOXact_PgStat(false);
2659+
AtEOXact_PgStat(false, is_parallel_worker);
26602660
AtEOXact_ApplyLauncher(false);
26612661
pgstat_report_xact_timestamp(0);
26622662
}

src/backend/postmaster/pgstat.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2050,18 +2050,22 @@ pgstat_update_heap_dead_tuples(Relation rel, int delta)
20502050
* ----------
20512051
*/
20522052
void
2053-
AtEOXact_PgStat(bool isCommit)
2053+
AtEOXact_PgStat(bool isCommit, bool parallel)
20542054
{
20552055
PgStat_SubXactStatus *xact_state;
20562056

2057-
/*
2058-
* Count transaction commit or abort. (We use counters, not just bools,
2059-
* in case the reporting message isn't sent right away.)
2060-
*/
2061-
if (isCommit)
2062-
pgStatXactCommit++;
2063-
else
2064-
pgStatXactRollback++;
2057+
/* Don't count parallel worker transaction stats */
2058+
if (!parallel)
2059+
{
2060+
/*
2061+
* Count transaction commit or abort. (We use counters, not just
2062+
* bools, in case the reporting message isn't sent right away.)
2063+
*/
2064+
if (isCommit)
2065+
pgStatXactCommit++;
2066+
else
2067+
pgStatXactRollback++;
2068+
}
20652069

20662070
/*
20672071
* Transfer transactional insert/update counts into the base tabstat

src/include/pgstat.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ extern void pgstat_init_function_usage(FunctionCallInfoData *fcinfo,
13241324
extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu,
13251325
bool finalize);
13261326

1327-
extern void AtEOXact_PgStat(bool isCommit);
1327+
extern void AtEOXact_PgStat(bool isCommit, bool parallel);
13281328
extern void AtEOSubXact_PgStat(bool isCommit, int nestDepth);
13291329

13301330
extern void AtPrepare_PgStat(void);

0 commit comments

Comments
 (0)