diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index a01cfb4..a3e5b61 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -105,6 +105,8 @@ typedef struct LVRelStats BlockNumber old_rel_pages; /* previous value of pg_class.relpages */ BlockNumber rel_pages; /* total number of pages */ BlockNumber scanned_pages; /* number of pages we examined */ + BlockIdData last_scanned_page; /* Used for measuring index scan progress */ + BlockNumber current_index_scanned_page_count; BlockNumber pinskipped_pages; /* # of pages we skipped due to a pin */ double scanned_tuples; /* counts only tuples on scanned pages */ double old_rel_tuples; /* previous value of pg_class.reltuples */ @@ -1364,6 +1366,7 @@ lazy_vacuum_index(Relation indrel, ivinfo.strategy = vac_strategy; /* Do bulk deletion */ + vacrelstats->current_index_scanned_page_count=0; *stats = index_bulk_delete(&ivinfo, *stats, lazy_tid_reaped, (void *) vacrelstats); @@ -1736,7 +1739,20 @@ lazy_tid_reaped(ItemPointer itemptr, void *state) { LVRelStats *vacrelstats = (LVRelStats *) state; ItemPointer res; - + BlockNumber current_count; + float percentage_complete; + if (((itemptr->ip_blkid.bi_hi != vacrelstats->last_scanned_page.bi_hi) || (itemptr->ip_blkid.bi_lo != vacrelstats->last_scanned_page.bi_lo)) && (vacrelstats->current_index_scanned_page_count < vacrelstats->scanned_pages)) + { + vacrelstats->last_scanned_page=itemptr->ip_blkid; + vacrelstats->current_index_scanned_page_count = vacrelstats->current_index_scanned_page_count + 1; + current_count = vacrelstats->current_index_scanned_page_count; + percentage_complete= ((float)current_count/(float)vacrelstats->scanned_pages)*100; + elog(WARNING,"Percentage completion %f", percentage_complete); + } + else + { + vacrelstats->last_scanned_page=itemptr->ip_blkid; + } res = (ItemPointer) bsearch((void *) itemptr, (void *) vacrelstats->dead_tuples, vacrelstats->num_dead_tuples,