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))
