mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Add relallfrozen to pg_class
Add relallfrozen, an estimate of the number of pages marked all-frozen in the visibility map. pg_class already has relallvisible, an estimate of the number of pages in the relation marked all-visible in the visibility map. This is used primarily for planning. relallfrozen, together with relallvisible, is useful for estimating the outstanding number of all-visible but not all-frozen pages in the relation for the purposes of scheduling manual VACUUMs and tuning vacuum freeze parameters. A future commit will use relallfrozen to trigger more frequent vacuums on insert-focused workloads with significant volume of frozen data. Bump catalog version Author: Melanie Plageman <melanieplageman@gmail.com> Reviewed-by: Nathan Bossart <nathandbossart@gmail.com> Reviewed-by: Robert Treat <rob@xzilla.net> Reviewed-by: Corey Huinker <corey.huinker@gmail.com> Reviewed-by: Greg Sabino Mullane <htamfids@gmail.com> Discussion: https://postgr.es/m/flat/CAAKRu_aj-P7YyBz_cPNwztz6ohP%2BvWis%3Diz3YcomkB3NpYA--w%40mail.gmail.com
This commit is contained in:
@@ -630,12 +630,11 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
*/
|
||||
if (!inh)
|
||||
{
|
||||
BlockNumber relallvisible;
|
||||
BlockNumber relallvisible = 0;
|
||||
BlockNumber relallfrozen = 0;
|
||||
|
||||
if (RELKIND_HAS_STORAGE(onerel->rd_rel->relkind))
|
||||
visibilitymap_count(onerel, &relallvisible, NULL);
|
||||
else
|
||||
relallvisible = 0;
|
||||
visibilitymap_count(onerel, &relallvisible, &relallfrozen);
|
||||
|
||||
/*
|
||||
* Update pg_class for table relation. CCI first, in case acquirefunc
|
||||
@@ -646,6 +645,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
relpages,
|
||||
totalrows,
|
||||
relallvisible,
|
||||
relallfrozen,
|
||||
hasindex,
|
||||
InvalidTransactionId,
|
||||
InvalidMultiXactId,
|
||||
@@ -662,7 +662,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
vac_update_relstats(Irel[ind],
|
||||
RelationGetNumberOfBlocks(Irel[ind]),
|
||||
totalindexrows,
|
||||
0,
|
||||
0, 0,
|
||||
false,
|
||||
InvalidTransactionId,
|
||||
InvalidMultiXactId,
|
||||
@@ -678,7 +678,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
*/
|
||||
CommandCounterIncrement();
|
||||
vac_update_relstats(onerel, -1, totalrows,
|
||||
0, hasindex, InvalidTransactionId,
|
||||
0, 0, hasindex, InvalidTransactionId,
|
||||
InvalidMultiXactId,
|
||||
NULL, NULL,
|
||||
in_outer_xact);
|
||||
|
||||
@@ -1226,6 +1226,7 @@ swap_relation_files(Oid r1, Oid r2, bool target_is_pg_class,
|
||||
int32 swap_pages;
|
||||
float4 swap_tuples;
|
||||
int32 swap_allvisible;
|
||||
int32 swap_allfrozen;
|
||||
|
||||
swap_pages = relform1->relpages;
|
||||
relform1->relpages = relform2->relpages;
|
||||
@@ -1238,6 +1239,10 @@ swap_relation_files(Oid r1, Oid r2, bool target_is_pg_class,
|
||||
swap_allvisible = relform1->relallvisible;
|
||||
relform1->relallvisible = relform2->relallvisible;
|
||||
relform2->relallvisible = swap_allvisible;
|
||||
|
||||
swap_allfrozen = relform1->relallfrozen;
|
||||
relform1->relallfrozen = relform2->relallfrozen;
|
||||
relform2->relallfrozen = swap_allfrozen;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1427,6 +1427,7 @@ void
|
||||
vac_update_relstats(Relation relation,
|
||||
BlockNumber num_pages, double num_tuples,
|
||||
BlockNumber num_all_visible_pages,
|
||||
BlockNumber num_all_frozen_pages,
|
||||
bool hasindex, TransactionId frozenxid,
|
||||
MultiXactId minmulti,
|
||||
bool *frozenxid_updated, bool *minmulti_updated,
|
||||
@@ -1476,6 +1477,11 @@ vac_update_relstats(Relation relation,
|
||||
pgcform->relallvisible = (int32) num_all_visible_pages;
|
||||
dirty = true;
|
||||
}
|
||||
if (pgcform->relallfrozen != (int32) num_all_frozen_pages)
|
||||
{
|
||||
pgcform->relallfrozen = (int32) num_all_frozen_pages;
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
/* Apply DDL updates, but not inside an outer transaction (see above) */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user