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

Commit d977ffd

Browse files
Instrument freezing in autovacuum log reports.
Add a new line to log reports from autovacuum (as well as VACUUM VERBOSE output) that shows information about freezing. Emphasis is placed on the total number of heap pages that had one or more tuples frozen by VACUUM. The total number of tuples frozen is also shown. Author: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Jeff Janes <jeff.janes@gmail.com> Discussion: https://postgr.es/m/CAH2-WznTY6D0zyE8VLrC6Gd4kh_HGAXxnTPtcOQOOsxzLx9zog@mail.gmail.com
1 parent b76fb6c commit d977ffd

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/backend/access/heap/vacuumlazy.c

+20-7
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ typedef struct LVRelState
198198
BlockNumber rel_pages; /* total number of pages */
199199
BlockNumber scanned_pages; /* # pages examined (not skipped via VM) */
200200
BlockNumber removed_pages; /* # pages removed by relation truncation */
201+
BlockNumber frozen_pages; /* # pages with newly frozen tuples */
201202
BlockNumber lpdead_item_pages; /* # pages with LP_DEAD items */
202203
BlockNumber missed_dead_pages; /* # pages with missed dead tuples */
203204
BlockNumber nonempty_pages; /* actually, last nonempty page + 1 */
@@ -212,6 +213,7 @@ typedef struct LVRelState
212213
int num_index_scans;
213214
/* Counters that follow are only for scanned_pages */
214215
int64 tuples_deleted; /* # deleted from table */
216+
int64 tuples_frozen; /* # newly frozen */
215217
int64 lpdead_items; /* # deleted from indexes */
216218
int64 live_tuples; /* # live tuples remaining */
217219
int64 recently_dead_tuples; /* # dead, but not yet removable */
@@ -470,6 +472,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
470472
/* Initialize page counters explicitly (be tidy) */
471473
vacrel->scanned_pages = 0;
472474
vacrel->removed_pages = 0;
475+
vacrel->frozen_pages = 0;
473476
vacrel->lpdead_item_pages = 0;
474477
vacrel->missed_dead_pages = 0;
475478
vacrel->nonempty_pages = 0;
@@ -484,6 +487,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
484487
/* Initialize remaining counters (be tidy) */
485488
vacrel->num_index_scans = 0;
486489
vacrel->tuples_deleted = 0;
490+
vacrel->tuples_frozen = 0;
487491
vacrel->lpdead_items = 0;
488492
vacrel->live_tuples = 0;
489493
vacrel->recently_dead_tuples = 0;
@@ -721,6 +725,11 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
721725
_("new relminmxid: %u, which is %d MXIDs ahead of previous value\n"),
722726
vacrel->NewRelminMxid, diff);
723727
}
728+
appendStringInfo(&buf, _("frozen: %u pages from table (%.2f%% of total) had %lld tuples frozen\n"),
729+
vacrel->frozen_pages,
730+
orig_rel_pages == 0 ? 100.0 :
731+
100.0 * vacrel->frozen_pages / orig_rel_pages,
732+
(long long) vacrel->tuples_frozen);
724733
if (vacrel->do_index_vacuuming)
725734
{
726735
if (vacrel->nindexes == 0 || vacrel->num_index_scans == 0)
@@ -1549,11 +1558,11 @@ lazy_scan_prune(LVRelState *vacrel,
15491558
HeapTupleData tuple;
15501559
HTSV_Result res;
15511560
int tuples_deleted,
1561+
tuples_frozen,
15521562
lpdead_items,
15531563
live_tuples,
15541564
recently_dead_tuples;
15551565
int nnewlpdead;
1556-
int nfrozen;
15571566
TransactionId NewRelfrozenXid;
15581567
MultiXactId NewRelminMxid;
15591568
OffsetNumber deadoffsets[MaxHeapTuplesPerPage];
@@ -1574,6 +1583,7 @@ lazy_scan_prune(LVRelState *vacrel,
15741583
NewRelfrozenXid = vacrel->NewRelfrozenXid;
15751584
NewRelminMxid = vacrel->NewRelminMxid;
15761585
tuples_deleted = 0;
1586+
tuples_frozen = 0;
15771587
lpdead_items = 0;
15781588
live_tuples = 0;
15791589
recently_dead_tuples = 0;
@@ -1600,7 +1610,6 @@ lazy_scan_prune(LVRelState *vacrel,
16001610
prunestate->all_visible = true;
16011611
prunestate->all_frozen = true;
16021612
prunestate->visibility_cutoff_xid = InvalidTransactionId;
1603-
nfrozen = 0;
16041613

16051614
for (offnum = FirstOffsetNumber;
16061615
offnum <= maxoff;
@@ -1779,11 +1788,12 @@ lazy_scan_prune(LVRelState *vacrel,
17791788
vacrel->relminmxid,
17801789
vacrel->FreezeLimit,
17811790
vacrel->MultiXactCutoff,
1782-
&frozen[nfrozen], &tuple_totally_frozen,
1791+
&frozen[tuples_frozen],
1792+
&tuple_totally_frozen,
17831793
&NewRelfrozenXid, &NewRelminMxid))
17841794
{
17851795
/* Will execute freeze below */
1786-
frozen[nfrozen++].offset = offnum;
1796+
frozen[tuples_frozen++].offset = offnum;
17871797
}
17881798

17891799
/*
@@ -1809,10 +1819,12 @@ lazy_scan_prune(LVRelState *vacrel,
18091819
* Consider the need to freeze any items with tuple storage from the page
18101820
* first (arbitrary)
18111821
*/
1812-
if (nfrozen > 0)
1822+
if (tuples_frozen > 0)
18131823
{
18141824
Assert(prunestate->hastup);
18151825

1826+
vacrel->frozen_pages++;
1827+
18161828
/*
18171829
* At least one tuple with storage needs to be frozen -- execute that
18181830
* now.
@@ -1826,7 +1838,7 @@ lazy_scan_prune(LVRelState *vacrel,
18261838
MarkBufferDirty(buf);
18271839

18281840
/* execute collected freezes */
1829-
for (int i = 0; i < nfrozen; i++)
1841+
for (int i = 0; i < tuples_frozen; i++)
18301842
{
18311843
HeapTupleHeader htup;
18321844

@@ -1842,7 +1854,7 @@ lazy_scan_prune(LVRelState *vacrel,
18421854
XLogRecPtr recptr;
18431855

18441856
recptr = log_heap_freeze(vacrel->rel, buf, vacrel->FreezeLimit,
1845-
frozen, nfrozen);
1857+
frozen, tuples_frozen);
18461858
PageSetLSN(page, recptr);
18471859
}
18481860

@@ -1914,6 +1926,7 @@ lazy_scan_prune(LVRelState *vacrel,
19141926

19151927
/* Finally, add page-local counts to whole-VACUUM counts */
19161928
vacrel->tuples_deleted += tuples_deleted;
1929+
vacrel->tuples_frozen += tuples_frozen;
19171930
vacrel->lpdead_items += lpdead_items;
19181931
vacrel->live_tuples += live_tuples;
19191932
vacrel->recently_dead_tuples += recently_dead_tuples;

0 commit comments

Comments
 (0)