diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 4e2ae78d255..9c53d0b4c57 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -3346,7 +3346,7 @@ vacuum_error_callback(void *arg) switch (errinfo->phase) { case VACUUM_ERRCB_PHASE_SCAN_HEAP: - if(geterrelevel() >= ERROR) + if(geterrelevel() == ERROR) pgstat_report_vacuum_error(errinfo->reloid, PGSTAT_EXTVAC_HEAP); if (BlockNumberIsValid(errinfo->blkno)) { @@ -3363,7 +3363,7 @@ vacuum_error_callback(void *arg) break; case VACUUM_ERRCB_PHASE_VACUUM_HEAP: - if(geterrelevel() >= ERROR) + if(geterrelevel() == ERROR) pgstat_report_vacuum_error(errinfo->reloid, PGSTAT_EXTVAC_HEAP); if (BlockNumberIsValid(errinfo->blkno)) { @@ -3380,21 +3380,21 @@ vacuum_error_callback(void *arg) break; case VACUUM_ERRCB_PHASE_VACUUM_INDEX: - if(geterrelevel() >= ERROR) + if(geterrelevel() == ERROR) pgstat_report_vacuum_error(errinfo->indoid, PGSTAT_EXTVAC_INDEX); errcontext("while vacuuming index \"%s\" of relation \"%s.%s\"", errinfo->indname, errinfo->relnamespace, errinfo->relname); break; case VACUUM_ERRCB_PHASE_INDEX_CLEANUP: - if(geterrelevel() >= ERROR) + if(geterrelevel() == ERROR) pgstat_report_vacuum_error(errinfo->indoid, PGSTAT_EXTVAC_INDEX); errcontext("while cleaning up index \"%s\" of relation \"%s.%s\"", errinfo->indname, errinfo->relnamespace, errinfo->relname); break; case VACUUM_ERRCB_PHASE_TRUNCATE: - if(geterrelevel() >= ERROR) + if(geterrelevel() == ERROR) pgstat_report_vacuum_error(errinfo->reloid, PGSTAT_EXTVAC_HEAP); if (BlockNumberIsValid(errinfo->blkno)) errcontext("while truncating relation \"%s.%s\" to %u blocks", diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index b633408777e..583c3ff0f03 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -829,57 +829,6 @@ pgstat_reset_of_kind(PgStat_Kind kind) pgstat_reset_entries_of_kind(kind, ts); } -void -pgstat_accumulate_extvac_stats(ExtVacReport *dst, ExtVacReport *src, - bool accumulate_reltype_specific_info) -{ - dst->total_blks_read += src->total_blks_read; - dst->total_blks_hit += src->total_blks_hit; - dst->total_blks_dirtied += src->total_blks_dirtied; - dst->total_blks_written += src->total_blks_written; - dst->wal_bytes += src->wal_bytes; - dst->wal_fpi += src->wal_fpi; - dst->wal_records += src->wal_records; - dst->blk_read_time += src->blk_read_time; - dst->blk_write_time += src->blk_write_time; - dst->delay_time += src->delay_time; - dst->system_time += src->system_time; - dst->user_time += src->user_time; - dst->total_time += src->total_time; - dst->interrupts += src->interrupts; - - if (!accumulate_reltype_specific_info) - return; - - if (dst->type == PGSTAT_EXTVAC_INVALID) - dst->type = src->type; - - Assert(src->type == PGSTAT_EXTVAC_INVALID || src->type == dst->type); - - if (dst->type == src->type) - { - dst->blks_fetched += src->blks_fetched; - dst->blks_hit += src->blks_hit; - - if (dst->type == PGSTAT_EXTVAC_HEAP) - { - dst->heap.pages_scanned += src->heap.pages_scanned; - dst->heap.pages_removed += src->heap.pages_removed; - dst->heap.pages_frozen += src->heap.pages_frozen; - dst->heap.pages_all_visible += src->heap.pages_all_visible; - dst->heap.tuples_deleted += src->heap.tuples_deleted; - dst->heap.tuples_frozen += src->heap.tuples_frozen; - dst->heap.dead_tuples += src->heap.dead_tuples; - dst->heap.index_vacuum_count += src->heap.index_vacuum_count; - } - else if (dst->type == PGSTAT_EXTVAC_INDEX) - { - dst->index.pages_deleted += src->index.pages_deleted; - dst->index.tuples_deleted += src->index.tuples_deleted; - } - } -} - /* ------------------------------------------------------------ * Fetching of stats * ------------------------------------------------------------ diff --git a/src/backend/utils/activity/pgstat_relation.c b/src/backend/utils/activity/pgstat_relation.c index cc09aba571f..e05de63b2f0 100644 --- a/src/backend/utils/activity/pgstat_relation.c +++ b/src/backend/utils/activity/pgstat_relation.c @@ -48,6 +48,8 @@ static void add_tabstat_xact_level(PgStat_TableStatus *pgstat_info, int nest_lev static void ensure_tabstat_xact_level(PgStat_TableStatus *pgstat_info); static void save_truncdrop_counters(PgStat_TableXactStatus *trans, bool is_drop); static void restore_truncdrop_counters(PgStat_TableXactStatus *trans); +static void pgstat_accumulate_extvac_stats(ExtVacReport *dst, ExtVacReport *src, + bool accumulate_reltype_specific_info); /* @@ -1034,3 +1036,66 @@ restore_truncdrop_counters(PgStat_TableXactStatus *trans) trans->tuples_deleted = trans->deleted_pre_truncdrop; } } + +static void +pgstat_accumulate_extvac_stats(ExtVacReport *dst, ExtVacReport *src, + bool accumulate_reltype_specific_info) +{ + dst->total_blks_read += src->total_blks_read; + dst->total_blks_hit += src->total_blks_hit; + dst->total_blks_dirtied += src->total_blks_dirtied; + dst->total_blks_written += src->total_blks_written; + dst->wal_bytes += src->wal_bytes; + dst->wal_fpi += src->wal_fpi; + dst->wal_records += src->wal_records; + dst->blk_read_time += src->blk_read_time; + dst->blk_write_time += src->blk_write_time; + dst->delay_time += src->delay_time; + dst->system_time += src->system_time; + dst->user_time += src->user_time; + dst->total_time += src->total_time; + dst->interrupts += src->interrupts; + + if (!accumulate_reltype_specific_info) + return; + + dst->blks_fetched += src->blks_fetched; + dst->blks_hit += src->blks_hit; + + dst->pages_scanned += src->pages_scanned; + dst->pages_removed += src->pages_removed; + dst->pages_frozen += src->pages_frozen; + dst->pages_all_visible += src->pages_all_visible; + dst->tuples_deleted += src->tuples_deleted; + dst->tuples_frozen += src->tuples_frozen; + dst->dead_tuples += src->dead_tuples; + dst->index_vacuum_count += src->index_vacuum_count; + + if (dst->type == PGSTAT_EXTVAC_INVALID) + dst->type = src->type; + + Assert(src->type == PGSTAT_EXTVAC_INVALID || src->type == dst->type); + + if (dst->type == src->type) + { + dst->blks_fetched += src->blks_fetched; + dst->blks_hit += src->blks_hit; + + if (dst->type == PGSTAT_EXTVAC_HEAP) + { + dst->heap.pages_scanned += src->heap.pages_scanned; + dst->heap.pages_removed += src->heap.pages_removed; + dst->heap.pages_frozen += src->heap.pages_frozen; + dst->heap.pages_all_visible += src->heap.pages_all_visible; + dst->heap.tuples_deleted += src->heap.tuples_deleted; + dst->heap.tuples_frozen += src->heap.tuples_frozen; + dst->heap.dead_tuples += src->heap.dead_tuples; + dst->heap.index_vacuum_count += src->heap.index_vacuum_count; + } + else if (dst->type == PGSTAT_EXTVAC_INDEX) + { + dst->index.pages_deleted += src->index.pages_deleted; + dst->index.tuples_deleted += src->index.tuples_deleted; + } + } +} \ No newline at end of file diff --git a/src/include/pgstat.h b/src/include/pgstat.h index c56c54de3b4..eacbee579b3 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -646,7 +646,7 @@ extern void pgstat_report_vacuum(Oid tableoid, bool shared, extern void pgstat_report_analyze(Relation rel, PgStat_Counter livetuples, PgStat_Counter deadtuples, bool resetcounter); -extern void pgstat_report_vacuum_error(Oid tableoid); +extern void pgstat_report_vacuum_error(Oid tableoid, ExtVacReportType m_type); /* * If stats are enabled, but pending data hasn't been prepared yet, call @@ -721,9 +721,6 @@ extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry(Oid relid); extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry_ext(bool shared, Oid reloid); extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id); -extern void -pgstat_accumulate_extvac_stats(ExtVacReport *dst, ExtVacReport *src, - bool accumulate_reltype_specific_info); /* * Functions in pgstat_replslot.c