mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Fix autovacuum log output heap truncation issue.
The percentage of blocks from the table value reported by autovacuum log
output (following commit 5100010ee4
) should never exceed 100% because
it describes the state of the table back when lazy_vacuum() was called.
The value could nevertheless exceed 100% in the event of heap relation
truncation. We failed to compensate for how truncation affects
rel_pages.
Fix the faulty accounting by using the original rel_pages value instead
of the current/final rel_pages value.
Reported-By: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20210423204306.5osfpkt2ggaedyvy@alap3.anarazel.de
This commit is contained in:
@ -777,6 +777,8 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
|
|||||||
(long long) VacuumPageDirty);
|
(long long) VacuumPageDirty);
|
||||||
if (vacrel->rel_pages > 0)
|
if (vacrel->rel_pages > 0)
|
||||||
{
|
{
|
||||||
|
BlockNumber orig_rel_pages;
|
||||||
|
|
||||||
if (vacrel->do_index_vacuuming)
|
if (vacrel->do_index_vacuuming)
|
||||||
{
|
{
|
||||||
msgfmt = _(" %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n");
|
msgfmt = _(" %u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n");
|
||||||
@ -795,9 +797,10 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
|
|||||||
else
|
else
|
||||||
appendStringInfo(&buf, _("index scan bypassed by failsafe:"));
|
appendStringInfo(&buf, _("index scan bypassed by failsafe:"));
|
||||||
}
|
}
|
||||||
|
orig_rel_pages = vacrel->rel_pages + vacrel->pages_removed;
|
||||||
appendStringInfo(&buf, msgfmt,
|
appendStringInfo(&buf, msgfmt,
|
||||||
vacrel->lpdead_item_pages,
|
vacrel->lpdead_item_pages,
|
||||||
100.0 * vacrel->lpdead_item_pages / vacrel->rel_pages,
|
100.0 * vacrel->lpdead_item_pages / orig_rel_pages,
|
||||||
(long long) vacrel->lpdead_items);
|
(long long) vacrel->lpdead_items);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < vacrel->nindexes; i++)
|
for (int i = 0; i < vacrel->nindexes; i++)
|
||||||
|
Reference in New Issue
Block a user