Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd977ffd

Browse files
Instrument freezing in autovacuum log reports.
Add a new line to log reports from autovacuum (as well as VACUUM VERBOSEoutput) that shows information about freezing. Emphasis is placed onthe total number of heap pages that had one or more tuples frozen byVACUUM. 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 parentb76fb6c commitd977ffd

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

‎src/backend/access/heap/vacuumlazy.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ typedef struct LVRelState
198198
BlockNumberrel_pages;/* total number of pages */
199199
BlockNumberscanned_pages;/* # pages examined (not skipped via VM) */
200200
BlockNumberremoved_pages;/* # pages removed by relation truncation */
201+
BlockNumberfrozen_pages;/* # pages with newly frozen tuples */
201202
BlockNumberlpdead_item_pages;/* # pages with LP_DEAD items */
202203
BlockNumbermissed_dead_pages;/* # pages with missed dead tuples */
203204
BlockNumbernonempty_pages;/* actually, last nonempty page + 1 */
@@ -212,6 +213,7 @@ typedef struct LVRelState
212213
intnum_index_scans;
213214
/* Counters that follow are only for scanned_pages */
214215
int64tuples_deleted;/* # deleted from table */
216+
int64tuples_frozen;/* # newly frozen */
215217
int64lpdead_items;/* # deleted from indexes */
216218
int64live_tuples;/* # live tuples remaining */
217219
int64recently_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
HeapTupleDatatuple;
15501559
HTSV_Resultres;
15511560
inttuples_deleted,
1561+
tuples_frozen,
15521562
lpdead_items,
15531563
live_tuples,
15541564
recently_dead_tuples;
15551565
intnnewlpdead;
1556-
intnfrozen;
15571566
TransactionIdNewRelfrozenXid;
15581567
MultiXactIdNewRelminMxid;
15591568
OffsetNumberdeadoffsets[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 (inti=0;i<nfrozen;i++)
1841+
for (inti=0;i<tuples_frozen;i++)
18301842
{
18311843
HeapTupleHeaderhtup;
18321844

@@ -1842,7 +1854,7 @@ lazy_scan_prune(LVRelState *vacrel,
18421854
XLogRecPtrrecptr;
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)

[8]ページ先頭

©2009-2025 Movatter.jp