postgrespro.git / summary / log / commit / refs

commit    007491979461ff10d487e1da9bcc87f2fd834f26
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Wed Feb 19 11:37:26 2020 +0000

    Fix mesurement of elapsed time during truncating heap in VACUUM.
    
    VACUUM may truncate heap in several batches. The activity report
    is logged for each batch, and contains the number of pages in the table
    before and after the truncation, and also the elapsed time during
    the truncation. Previously the elapsed time reported in each batch was
    the total elapsed time since starting the truncation until finishing
    each batch. For example, if the truncation was processed dividing into
    three batches, the second batch reported the accumulated time elapsed
    during both first and second batches. This is strange and confusing
    because the number of pages in the table reported together is not
    total. Instead, each batch should report the time elapsed during
    only that batch.
    
    The cause of this issue was that the resource usage snapshot was
    initialized only at the beginning of the truncation and was never
    reset later. This commit fixes the issue by changing VACUUM so that
    the resource usage snapshot is reset at each batch.
    
    Back-patch to all supported branches.
    
    Reported-by: Tatsuhito Kasahara
    Author: Tatsuhito Kasahara
    Reviewed-by: Masahiko Sawada, Fujii Masao
    Discussion: https://postgr.es/m/CAP0=ZVJsf=NvQuy+QXQZ7B=ZVLoDV_JzsVC1FRsF1G18i3zMGg@mail.gmail.com


src/backend/access/heap/vacuumlazy.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index a23cdefbd0..03c43efc32 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -2439,11 +2439,8 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats) { BlockNumber old_rel_pages = vacrelstats->rel_pages; BlockNumber new_rel_pages; - PGRUsage ru0; int lock_retry; - pg_rusage_init(&ru0); - /* Report that we are now truncating */ pgstat_progress_update_param(PROGRESS_VACUUM_PHASE, PROGRESS_VACUUM_PHASE_TRUNCATE); @@ -2453,6 +2450,10 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats) */ do { + PGRUsage ru0; + + pg_rusage_init(&ru0); + /* * We need full exclusive lock on the relation in order to do * truncation. If we can't get it, give up rather than waiting --- we [parent: e2e02191e233]