diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 5cc30da..1cbd336 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -166,7 +166,8 @@ hashbuild(Relation heap, Relation index, IndexInfo *indexInfo) reltuples = table_index_build_scan(heap, index, indexInfo, true, true, hashbuildCallback, (void *) &buildstate, NULL); - pgstat_progress_update_param(PROGRESS_CREATEIDX_TUPLES_TOTAL, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_TUPLES_TOTAL, buildstate.indtuples); if (buildstate.spool) diff --git a/src/backend/access/hash/hashsort.c b/src/backend/access/hash/hashsort.c index 293f80f..98653d4 100644 --- a/src/backend/access/hash/hashsort.c +++ b/src/backend/access/hash/hashsort.c @@ -145,7 +145,8 @@ _h_indexbuild(HSpool *hspool, Relation heapRel) _hash_doinsert(hspool->index, itup, heapRel); - pgstat_progress_update_param(PROGRESS_CREATEIDX_TUPLES_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_TUPLES_DONE, ++tups_done); } } diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index fc19f40..6f086b1 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -759,7 +759,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, /* Set phase and OIDOldIndex to columns */ ci_val[0] = PROGRESS_CLUSTER_PHASE_INDEX_SCAN_HEAP; ci_val[1] = RelationGetRelid(OldIndex); - pgstat_progress_update_multi_param(2, ci_index, ci_val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CLUSTER, + 2, ci_index, ci_val); tableScan = NULL; heapScan = NULL; @@ -769,7 +770,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, else { /* In scan-and-sort mode and also VACUUM FULL, set phase */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_SEQ_SCAN_HEAP); tableScan = table_beginscan(OldHeap, SnapshotAny, 0, (ScanKey) NULL); @@ -777,7 +779,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, indexScan = NULL; /* Set total heap blocks */ - pgstat_progress_update_param(PROGRESS_CLUSTER_TOTAL_HEAP_BLKS, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_TOTAL_HEAP_BLKS, heapScan->rs_nblocks); } @@ -816,7 +819,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, * In scan-and-sort mode and also VACUUM FULL, set heap blocks * scanned */ - pgstat_progress_update_param(PROGRESS_CLUSTER_HEAP_BLKS_SCANNED, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_HEAP_BLKS_SCANNED, heapScan->rs_cblock + 1); } @@ -898,7 +902,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, * In scan-and-sort mode, report increase in number of tuples * scanned */ - pgstat_progress_update_param(PROGRESS_CLUSTER_HEAP_TUPLES_SCANNED, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_HEAP_TUPLES_SCANNED, *num_tuples); } else @@ -918,7 +923,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, */ ct_val[0] = *num_tuples; ct_val[1] = *num_tuples; - pgstat_progress_update_multi_param(2, ct_index, ct_val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CLUSTER, + 2, ct_index, ct_val); } } @@ -938,13 +944,15 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, double n_tuples = 0; /* Report that we are now sorting tuples */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_SORT_TUPLES); tuplesort_performsort(tuplesort); /* Report that we are now writing new heap */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_WRITE_NEW_HEAP); for (;;) @@ -963,7 +971,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, values, isnull, rwstate); /* Report n_tuples */ - pgstat_progress_update_param(PROGRESS_CLUSTER_HEAP_TUPLES_WRITTEN, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_HEAP_TUPLES_WRITTEN, n_tuples); } @@ -1276,7 +1285,8 @@ heapam_index_build_range_scan(Relation heapRelation, else nblocks = hscan->rs_nblocks; - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_TOTAL, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_TOTAL, nblocks); } @@ -1319,7 +1329,8 @@ heapam_index_build_range_scan(Relation heapRelation, if (blocks_done != previous_blkno) { - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_DONE, blocks_done); previous_blkno = blocks_done; } @@ -1681,7 +1692,8 @@ heapam_index_build_range_scan(Relation heapRelation, else blks_done = hscan->rs_nblocks; - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_DONE, blks_done); } @@ -1762,7 +1774,8 @@ heapam_index_validate_scan(Relation heapRelation, false); /* syncscan not OK */ hscan = (HeapScanDesc) scan; - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_TOTAL, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_TOTAL, hscan->rs_nblocks); /* @@ -1781,7 +1794,8 @@ heapam_index_validate_scan(Relation heapRelation, if ((previous_blkno == InvalidBlockNumber) || (hscan->rs_cblock != previous_blkno)) { - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_DONE, hscan->rs_cblock); previous_blkno = hscan->rs_cblock; } diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index a3c4a1d..b7d4840 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -268,7 +268,7 @@ heap_vacuum_rel(Relation onerel, VacuumParams *params, get_database_name(MyDatabaseId), get_namespace_name(RelationGetNamespace(onerel)), RelationGetRelationName(onerel)))); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_VACUUM); return; } @@ -314,7 +314,8 @@ heap_vacuum_rel(Relation onerel, VacuumParams *params, lazy_truncate_heap(onerel, vacrelstats); /* Report that we are now doing final cleanup */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_FINAL_CLEANUP); /* @@ -367,7 +368,7 @@ heap_vacuum_rel(Relation onerel, VacuumParams *params, onerel->rd_rel->relisshared, new_live_tuples, vacrelstats->new_dead_tuples); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_VACUUM); /* and log the action if appropriate */ if (IsAutoVacuumWorkerProcess() && params->log_min_duration >= 0) @@ -560,7 +561,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, initprog_val[0] = PROGRESS_VACUUM_PHASE_SCAN_HEAP; initprog_val[1] = nblocks; initprog_val[2] = vacrelstats->max_dead_tuples; - pgstat_progress_update_multi_param(3, initprog_index, initprog_val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_VACUUM, + 3, initprog_index, initprog_val); /* * Except when aggressive is set, we want to skip pages that are @@ -656,7 +658,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, #define FORCE_CHECK_PAGE() \ (blkno == nblocks - 1 && should_attempt_truncation(params, vacrelstats)) - pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); if (blkno == next_unskippable_block) { @@ -762,7 +765,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, vacuum_log_cleanup_info(onerel, vacrelstats); /* Report that we are now vacuuming indexes */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_INDEX); /* Remove index entries */ @@ -779,7 +783,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, */ hvp_val[0] = PROGRESS_VACUUM_PHASE_VACUUM_HEAP; hvp_val[1] = vacrelstats->num_index_scans + 1; - pgstat_progress_update_multi_param(2, hvp_index, hvp_val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_VACUUM, + 2, hvp_index, hvp_val); /* Remove tuples from heap */ lazy_vacuum_heap(onerel, vacrelstats); @@ -800,7 +805,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, next_fsm_block_to_vacuum = blkno; /* Report that we are once again scanning the heap */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_SCAN_HEAP); } @@ -1389,7 +1395,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, } /* report that everything is scanned and vacuumed */ - pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_HEAP_BLKS_SCANNED, blkno); pfree(frozen); @@ -1430,7 +1437,8 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, vacuum_log_cleanup_info(onerel, vacrelstats); /* Report that we are now vacuuming indexes */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_INDEX); /* Remove index entries */ @@ -1442,10 +1450,12 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, /* Report that we are now vacuuming the heap */ hvp_val[0] = PROGRESS_VACUUM_PHASE_VACUUM_HEAP; hvp_val[1] = vacrelstats->num_index_scans + 1; - pgstat_progress_update_multi_param(2, hvp_index, hvp_val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_VACUUM, + 2, hvp_index, hvp_val); /* Remove tuples from heap */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_VACUUM_HEAP); lazy_vacuum_heap(onerel, vacrelstats); vacrelstats->num_index_scans++; @@ -1459,8 +1469,10 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, FreeSpaceMapVacuumRange(onerel, next_fsm_block_to_vacuum, blkno); /* report all blocks vacuumed; and that we're cleaning up */ - pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_INDEX_CLEANUP); /* Do post-vacuum cleanup and statistics update for each index */ @@ -1597,7 +1609,8 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer, TransactionId visibility_cutoff_xid; bool all_frozen; - pgstat_progress_update_param(PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_HEAP_BLKS_VACUUMED, blkno); START_CRIT_SECTION(); @@ -1880,7 +1893,8 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats) pg_rusage_init(&ru0); /* Report that we are now truncating */ - pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_TRUNCATE); /* @@ -2186,7 +2200,8 @@ lazy_record_dead_tuple(LVRelStats *vacrelstats, { vacrelstats->dead_tuples[vacrelstats->num_dead_tuples] = *itemptr; vacrelstats->num_dead_tuples++; - pgstat_progress_update_param(PROGRESS_VACUUM_NUM_DEAD_TUPLES, + pgstat_progress_update_param(PROGRESS_COMMAND_VACUUM, + PROGRESS_VACUUM_NUM_DEAD_TUPLES, vacrelstats->num_dead_tuples); } } diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 4cfd528..028afb1 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -1024,7 +1024,8 @@ btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, UnlockRelationForExtension(rel, ExclusiveLock); if (info->report_progress) - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_TOTAL, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_TOTAL, num_pages); /* Quit if we've scanned the whole relation */ @@ -1035,7 +1036,8 @@ btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, { btvacuumpage(&vstate, blkno, blkno); if (info->report_progress) - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_SCAN_BLOCKS_DONE, blkno); } } diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index d0b9013..a4582cc 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -397,7 +397,8 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, buildstate->spool = btspool; /* Report table scan phase started */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_BTREE_PHASE_INDEXBUILD_TABLESCAN); /* Attempt to launch parallel worker scan when required */ @@ -508,7 +509,8 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, 0, 0 }; - pgstat_progress_update_multi_param(3, index, val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CREATE_INDEX, + 3, index, val); } /* okay, all heap tuples are spooled */ @@ -559,12 +561,14 @@ _bt_leafbuild(BTSpool *btspool, BTSpool *btspool2) } #endif /* BTREE_BUILD_STATS */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_BTREE_PHASE_PERFORMSORT_1); tuplesort_performsort(btspool->sortstate); if (btspool2) { - pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_BTREE_PHASE_PERFORMSORT_2); tuplesort_performsort(btspool2->sortstate); } @@ -584,7 +588,8 @@ _bt_leafbuild(BTSpool *btspool, BTSpool *btspool2) wstate.btws_pages_written = 0; wstate.btws_zeropage = NULL; /* until needed */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_BTREE_PHASE_LEAF_LOAD); _bt_load(&wstate, btspool, btspool2); } @@ -1259,7 +1264,8 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2) } /* Report progress */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_TUPLES_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_TUPLES_DONE, ++tuples_done); } pfree(sortKeys); @@ -1277,7 +1283,8 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2) _bt_buildadd(wstate, state, itup); /* Report progress */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_TUPLES_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_TUPLES_DONE, ++tuples_done); } } diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index c87524e..fe30835 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2584,7 +2584,8 @@ AbortTransaction(void) /* Clear wait information and command progress indicator */ pgstat_report_wait_end(); - pgstat_progress_end_command(); + + pgstat_progress_end_command(PROGRESS_COMMAND_INVALID); /* Clean up buffer I/O and buffer context locks, too */ AbortBufferIO(); @@ -4896,7 +4897,7 @@ AbortSubTransaction(void) LWLockReleaseAll(); pgstat_report_wait_end(); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_INVALID); AbortBufferIO(); UnlockBuffers(); diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 795597b..ac15986 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -2779,7 +2779,8 @@ index_build(Relation heapRelation, 0, 0, 0, 0 }; - pgstat_progress_update_multi_param(6, index, val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CREATE_INDEX, + 6, index, val); } /* @@ -3083,7 +3084,8 @@ validate_index(Oid heapId, Oid indexId, Snapshot snapshot) 0, 0, 0, 0 }; - pgstat_progress_update_multi_param(5, index, val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CREATE_INDEX, + 5, index, val); } /* Open and lock the parent heap relation */ @@ -3150,14 +3152,16 @@ validate_index(Oid heapId, Oid indexId, Snapshot snapshot) 0, 0 }; - pgstat_progress_update_multi_param(3, index, val); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CREATE_INDEX, + 3, index, val); } tuplesort_performsort(state.tuplesort); /* * Now scan the heap and "merge" it with the index */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_VALIDATE_TABLESCAN); table_index_validate_scan(heapRelation, indexRelation, @@ -3340,9 +3344,11 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, heapId); - pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_COMMAND, PROGRESS_CREATEIDX_COMMAND_REINDEX); - pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_INDEX_OID, indexId); /* @@ -3351,7 +3357,8 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, */ iRel = index_open(indexId, AccessExclusiveLock); - pgstat_progress_update_param(PROGRESS_CREATEIDX_ACCESS_METHOD_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_ACCESS_METHOD_OID, iRel->rd_rel->relam); /* @@ -3505,7 +3512,7 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, errdetail_internal("%s", pg_rusage_show(&ru0)))); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); /* Close rels, but keep locks */ index_close(iRel, NoLock); @@ -3631,7 +3638,8 @@ reindex_relation(Oid relid, int flags, int options) Assert(!ReindexIsProcessingIndex(indexOid)); /* Set index rebuild count */ - pgstat_progress_update_param(PROGRESS_CLUSTER_INDEX_REBUILD_COUNT, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_INDEX_REBUILD_COUNT, i); i++; } diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index ebaec4f..7f276e0 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -274,10 +274,12 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) pgstat_progress_start_command(PROGRESS_COMMAND_CLUSTER, tableOid); if (OidIsValid(indexOid)) - pgstat_progress_update_param(PROGRESS_CLUSTER_COMMAND, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_COMMAND, PROGRESS_CLUSTER_COMMAND_CLUSTER); else - pgstat_progress_update_param(PROGRESS_CLUSTER_COMMAND, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_COMMAND, PROGRESS_CLUSTER_COMMAND_VACUUM_FULL); /* @@ -291,7 +293,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) /* If the table has gone away, we can skip processing it */ if (!OldHeap) { - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } @@ -312,7 +314,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) if (!pg_class_ownercheck(tableOid, GetUserId())) { relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } @@ -327,7 +329,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) if (RELATION_IS_OTHER_TEMP(OldHeap)) { relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } @@ -339,7 +341,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) if (!SearchSysCacheExists1(RELOID, ObjectIdGetDatum(indexOid))) { relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } @@ -350,7 +352,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) if (!HeapTupleIsValid(tuple)) /* probably can't happen */ { relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } indexForm = (Form_pg_index) GETSTRUCT(tuple); @@ -358,7 +360,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) { ReleaseSysCache(tuple); relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } ReleaseSysCache(tuple); @@ -413,7 +415,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) !RelationIsPopulated(OldHeap)) { relation_close(OldHeap, AccessExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); return; } @@ -430,7 +432,7 @@ cluster_rel(Oid tableOid, Oid indexOid, int options) /* NB: rebuild_relation does table_close() on OldHeap */ - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CLUSTER); } /* @@ -1353,7 +1355,8 @@ finish_heap_swap(Oid OIDOldHeap, Oid OIDNewHeap, int i; /* Report that we are now swapping relation files */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_SWAP_REL_FILES); /* Zero out possible results from swapped_relation_files */ @@ -1404,13 +1407,15 @@ finish_heap_swap(Oid OIDOldHeap, Oid OIDNewHeap, reindex_flags |= REINDEX_REL_FORCE_INDEXES_PERMANENT; /* Report that we are now reindexing relations */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_REBUILD_INDEX); reindex_relation(OIDOldHeap, reindex_flags, 0); /* Report that we are now doing clean up */ - pgstat_progress_update_param(PROGRESS_CLUSTER_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CLUSTER, + PROGRESS_CLUSTER_PHASE, PROGRESS_CLUSTER_PHASE_FINAL_CLEANUP); /* diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index cbac314..a746d4a 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -347,7 +347,8 @@ WaitForOlderSnapshots(TransactionId limitXmin, bool progress) PROC_IS_AUTOVACUUM | PROC_IN_VACUUM, &n_old_snapshots); if (progress) - pgstat_progress_update_param(PROGRESS_WAITFOR_TOTAL, n_old_snapshots); + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_TOTAL, n_old_snapshots); for (i = 0; i < n_old_snapshots; i++) { @@ -388,14 +389,16 @@ WaitForOlderSnapshots(TransactionId limitXmin, bool progress) { PGPROC *holder = BackendIdGetProc(old_snapshots[i].backendId); - pgstat_progress_update_param(PROGRESS_WAITFOR_CURRENT_PID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_CURRENT_PID, holder->pid); } VirtualXactLock(old_snapshots[i], true); } if (progress) - pgstat_progress_update_param(PROGRESS_WAITFOR_DONE, i + 1); + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_DONE, i + 1); } } @@ -491,7 +494,8 @@ DefineIndex(Oid relationId, { pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, relationId); - pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_COMMAND, stmt->concurrent ? PROGRESS_CREATEIDX_COMMAND_CREATE_CONCURRENTLY : PROGRESS_CREATEIDX_COMMAND_CREATE); @@ -500,7 +504,8 @@ DefineIndex(Oid relationId, /* * No index OID to report yet */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_INDEX_OID, InvalidOid); /* @@ -724,7 +729,8 @@ DefineIndex(Oid relationId, accessMethodId = accessMethodForm->oid; amRoutine = GetIndexAmRoutine(accessMethodForm->amhandler); - pgstat_progress_update_param(PROGRESS_CREATEIDX_ACCESS_METHOD_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_ACCESS_METHOD_OID, accessMethodId); if (stmt->unique && !amRoutine->amcanunique) @@ -1007,7 +1013,7 @@ DefineIndex(Oid relationId, /* If this is the top-level index, we're done */ if (!OidIsValid(parentIndexId)) - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); return address; } @@ -1034,7 +1040,8 @@ DefineIndex(Oid relationId, TupleDesc parentDesc; Oid *opfamOids; - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_TOTAL, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PARTITIONS_TOTAL, nparts); memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts); @@ -1214,7 +1221,8 @@ DefineIndex(Oid relationId, skip_build, quiet); } - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PARTITIONS_DONE, i + 1); pfree(attmap); } @@ -1250,7 +1258,7 @@ DefineIndex(Oid relationId, */ table_close(rel, NoLock); if (!OidIsValid(parentIndexId)) - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); return address; } @@ -1261,7 +1269,7 @@ DefineIndex(Oid relationId, /* If this is the top-level index, we're done. */ if (!OidIsValid(parentIndexId)) - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); return address; } @@ -1301,7 +1309,8 @@ DefineIndex(Oid relationId, /* * The index is now visible, so we can report the OID. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_INDEX_OID, indexRelationId); /* @@ -1320,7 +1329,8 @@ DefineIndex(Oid relationId, * exclusive lock on our table. The lock code will detect deadlock and * error out properly. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_1); WaitForLockers(heaplocktag, ShareLock, true); @@ -1363,7 +1373,8 @@ DefineIndex(Oid relationId, * We once again wait until no transaction can have the table open with * the index marked as read-only for updates. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_2); WaitForLockers(heaplocktag, ShareLock, true); @@ -1422,7 +1433,8 @@ DefineIndex(Oid relationId, * before the reference snap was taken, we have to wait out any * transactions that might have older snapshots. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_3); WaitForOlderSnapshots(limitXmin, true); @@ -1446,7 +1458,7 @@ DefineIndex(Oid relationId, */ UnlockRelationIdForSession(&heaprelid, ShareUpdateExclusiveLock); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); return address; } @@ -2939,11 +2951,14 @@ ReindexRelationConcurrently(Oid relationOid, int options) pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, RelationGetRelid(heapRel)); - pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_COMMAND, PROGRESS_CREATEIDX_COMMAND_REINDEX_CONCURRENTLY); - pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_INDEX_OID, indexId); - pgstat_progress_update_param(PROGRESS_CREATEIDX_ACCESS_METHOD_OID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_ACCESS_METHOD_OID, indexRel->rd_rel->relam); /* Choose a temporary relation name for the new index */ @@ -3040,7 +3055,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) * DefineIndex() for more details. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_1); WaitForLockersMultiple(lockTags, ShareLock, true); CommitTransactionCommand(); @@ -3084,7 +3100,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) * for more details. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_2); WaitForLockersMultiple(lockTags, ShareLock, true); CommitTransactionCommand(); @@ -3134,7 +3151,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) * just before the reference snap was taken, we have to wait out any * transactions that might have older snapshots. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_3); WaitForOlderSnapshots(limitXmin, true); @@ -3207,7 +3225,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) * index_drop() for more details. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_4); WaitForLockersMultiple(lockTags, AccessExclusiveLock, true); @@ -3231,7 +3250,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) * Drop the old indexes. */ - pgstat_progress_update_param(PROGRESS_CREATEIDX_PHASE, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_PHASE_WAIT_4); WaitForLockersMultiple(lockTags, AccessExclusiveLock, true); @@ -3308,7 +3328,7 @@ ReindexRelationConcurrently(Oid relationOid, int options) MemoryContextDelete(private_context); - pgstat_progress_end_command(); + pgstat_progress_end_command(PROGRESS_COMMAND_CREATE_INDEX); return true; } diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 099e14d..552779d 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3203,6 +3203,9 @@ pgstat_progress_start_command(ProgressCommandType cmdtype, Oid relid) if (!beentry || !pgstat_track_activities) return; + if (beentry->st_progress_command != PROGRESS_COMMAND_INVALID) + return; + PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); beentry->st_progress_command = cmdtype; beentry->st_progress_command_target = relid; @@ -3217,7 +3220,7 @@ pgstat_progress_start_command(ProgressCommandType cmdtype, Oid relid) *----------- */ void -pgstat_progress_update_param(int index, int64 val) +pgstat_progress_update_param(ProgressCommandType cmdtype, int index, int64 val) { volatile PgBackendStatus *beentry = MyBEEntry; @@ -3226,6 +3229,9 @@ pgstat_progress_update_param(int index, int64 val) if (!beentry || !pgstat_track_activities) return; + if (beentry->st_progress_command != cmdtype) + return; + PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); beentry->st_progress_param[index] = val; PGSTAT_END_WRITE_ACTIVITY(beentry); @@ -3239,7 +3245,8 @@ pgstat_progress_update_param(int index, int64 val) *----------- */ void -pgstat_progress_update_multi_param(int nparam, const int *index, +pgstat_progress_update_multi_param(ProgressCommandType cmdtype, + int nparam, const int *index, const int64 *val) { volatile PgBackendStatus *beentry = MyBEEntry; @@ -3248,6 +3255,9 @@ pgstat_progress_update_multi_param(int nparam, const int *index, if (!beentry || !pgstat_track_activities || nparam == 0) return; + if (beentry->st_progress_command != cmdtype) + return; + PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); for (i = 0; i < nparam; ++i) @@ -3268,14 +3278,14 @@ pgstat_progress_update_multi_param(int nparam, const int *index, *----------- */ void -pgstat_progress_end_command(void) +pgstat_progress_end_command(ProgressCommandType cmdtype) { volatile PgBackendStatus *beentry = MyBEEntry; if (!beentry || !pgstat_track_activities) return; - if (beentry->st_progress_command == PROGRESS_COMMAND_INVALID) + if (beentry->st_progress_command != cmdtype) return; PGSTAT_BEGIN_WRITE_ACTIVITY(beentry); diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c index f838b0f..52efd31 100644 --- a/src/backend/storage/lmgr/lmgr.c +++ b/src/backend/storage/lmgr/lmgr.c @@ -885,7 +885,8 @@ WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress) } if (progress) - pgstat_progress_update_param(PROGRESS_WAITFOR_TOTAL, total); + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_TOTAL, total); /* * Note: GetLockConflicts() never reports our own xid, hence we need not @@ -908,14 +909,16 @@ WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress) { PGPROC *holder = BackendIdGetProc(lockholders->backendId); - pgstat_progress_update_param(PROGRESS_WAITFOR_CURRENT_PID, + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_CURRENT_PID, holder->pid); } VirtualXactLock(*lockholders, true); lockholders++; if (progress) - pgstat_progress_update_param(PROGRESS_WAITFOR_DONE, ++done); + pgstat_progress_update_param(PROGRESS_COMMAND_CREATE_INDEX, + PROGRESS_WAITFOR_DONE, ++done); } } if (progress) @@ -929,7 +932,8 @@ WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress) 0, 0, 0 }; - pgstat_progress_update_multi_param(3, index, values); + pgstat_progress_update_multi_param(PROGRESS_COMMAND_CREATE_INDEX, + 3, index, values); } list_free_deep(holders); diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 0a3ad3a..a5c3ca2 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -1288,10 +1288,12 @@ extern const char *pgstat_get_backend_desc(BackendType backendType); extern void pgstat_progress_start_command(ProgressCommandType cmdtype, Oid relid); -extern void pgstat_progress_update_param(int index, int64 val); -extern void pgstat_progress_update_multi_param(int nparam, const int *index, +extern void pgstat_progress_update_param(ProgressCommandType cmdtype, + int index, int64 val); +extern void pgstat_progress_update_multi_param(ProgressCommandType cmdtype, + int nparam, const int *index, const int64 *val); -extern void pgstat_progress_end_command(void); +extern void pgstat_progress_end_command(ProgressCommandType cmdtype); extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id); extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id);