fix_masahiko.patch
application/octet-stream
Filename: fix_masahiko.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/access/heap/vacuumlazy.c | 27 | 24 |
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 826db728418..ef2c72edf5d 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -347,8 +347,8 @@ typedef struct LVRelState
/* Instrumentation counters */
int num_index_scans;
- int num_dead_items_resets; /* # times dead_items was reset */
- Size total_dead_items_bytes; /* # total memory usage for dead_items */
+ int num_dead_items_resets;
+ Size total_dead_items_bytes;
/* Counters that follow are only for scanned_pages */
int64 tuples_deleted; /* # deleted from table */
int64 tuples_frozen; /* # newly frozen */
@@ -647,7 +647,7 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
BufferUsage startbufferusage = pgBufferUsage;
ErrorContextCallback errcallback;
char **indnames = NULL;
- Size dead_items_max_bytes = 0; /* # save max_bytes before cleanup */
+ Size dead_items_max_bytes = 0;
verbose = (params.options & VACOPT_VERBOSE) != 0;
instrument = (verbose || (AmAutoVacuumWorkerProcess() &&
@@ -762,14 +762,14 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
/* Initialize remaining counters (be tidy) */
vacrel->num_index_scans = 0;
+ vacrel->num_dead_items_resets = 0;
+ vacrel->total_dead_items_bytes = 0;
vacrel->tuples_deleted = 0;
vacrel->tuples_frozen = 0;
vacrel->lpdead_items = 0;
vacrel->live_tuples = 0;
vacrel->recently_dead_tuples = 0;
vacrel->missed_dead_tuples = 0;
- vacrel->total_dead_items_bytes = 0;
- vacrel->num_dead_items_resets = 0;
vacrel->vm_new_visible_pages = 0;
vacrel->vm_new_visible_frozen_pages = 0;
@@ -849,18 +849,19 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
lazy_check_wraparound_failsafe(vacrel);
dead_items_alloc(vacrel, params.nworkers);
- /*
- * Save max_bytes before cleanup, as dead_items_info may be freed in
- * parallel mode during dead_items_cleanup().
- */
- dead_items_max_bytes = vacrel->dead_items_info->max_bytes;
-
/*
* Call lazy_scan_heap to perform all required heap pruning, index
* vacuuming, and heap vacuuming (plus related processing)
*/
lazy_scan_heap(vacrel);
+ /*
+ * Save dead items max_bytes before cleanup for reporting the memory usage
+ * as the dead_items_info is freed in parallel vacuum cases during
+ * cleanup.
+ */
+ dead_items_max_bytes = vacrel->dead_items_info->max_bytes;
+
/*
* Free resources managed by dead_items_alloc. This ends parallel mode in
* passing when necessary.
@@ -1165,19 +1166,23 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
walusage.wal_bytes,
walusage.wal_fpi_bytes,
walusage.wal_buffers_full);
+
/*
- * Report memory usage for dead_items tracking.
- * Note: num_dead_items_resets includes the final reset that occurs
- * at the end of vacuum, so the count represents all resets including
- * the last one.
+ * Report the dead-items memory usage.
+ *
+ * The num_dead_items_resets counter increases when we collect
+ * enough dead items to trigger index vacuuming, either because
+ * we've run out of available space or reached the end of the
+ * table. Note that this counter may be non-zero even when index
+ * vacuuming is disabled.
*/
appendStringInfo(&buf,
- ngettext("memory usage: %.2f MB in total, with dead-item storage reset %d time (limit was %.2f MB)\n",
- "memory usage: %.2f MB in total, with dead-item storage reset %d times (limit was %.2f MB)\n",
- vacrel->num_dead_items_resets),
- (double) vacrel->total_dead_items_bytes / (1024.0 * 1024.0),
- vacrel->num_dead_items_resets,
- (double) dead_items_max_bytes / (1024.0 * 1024.0));
+ ngettext("memory usage: %.2f MB in total, with dead-item storage reset %d time (limit was %.2f MB)\n",
+ "memory usage: %.2f MB in total, with dead-item storage reset %d times (limit was %.2f MB)\n",
+ vacrel->num_dead_items_resets),
+ (double) vacrel->total_dead_items_bytes / (1024 * 1024),
+ vacrel->num_dead_items_resets,
+ (double) dead_items_max_bytes / (1024 * 1024));
appendStringInfo(&buf, _("system usage: %s"), pg_rusage_show(&ru0));
ereport(verbose ? INFO : LOG,
@@ -3627,10 +3632,8 @@ dead_items_add(LVRelState *vacrel, BlockNumber blkno, OffsetNumber *offsets,
static void
dead_items_reset(LVRelState *vacrel)
{
- /* Increment dead_items reset counter */
+ /* Update statistics for dead items */
vacrel->num_dead_items_resets++;
-
- /* Track total memory usage for dead_items */
vacrel->total_dead_items_bytes += TidStoreMemoryUsage(vacrel->dead_items);
if (ParallelVacuumIsActive(vacrel))