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,