@ -2319,6 +2319,17 @@ lazy_vacuum_all_indexes(LVRelState *vacrel)
{
bool allindexes = true ;
double old_live_tuples = vacrel - > rel - > rd_rel - > reltuples ;
const int progress_start_index [ ] = {
PROGRESS_VACUUM_PHASE ,
PROGRESS_VACUUM_INDEXES_TOTAL
} ;
const int progress_end_index [ ] = {
PROGRESS_VACUUM_INDEXES_TOTAL ,
PROGRESS_VACUUM_INDEXES_PROCESSED ,
PROGRESS_VACUUM_NUM_INDEX_VACUUMS
} ;
int64 progress_start_val [ 2 ] ;
int64 progress_end_val [ 3 ] ;
Assert ( vacrel - > nindexes > 0 ) ;
Assert ( vacrel - > do_index_vacuuming ) ;
@ -2331,9 +2342,13 @@ lazy_vacuum_all_indexes(LVRelState *vacrel)
return false ;
}
/* Report that we are now vacuuming indexes */
pgstat_progress_update_param ( PROGRESS_VACUUM_PHASE ,
PROGRESS_VACUUM_PHASE_VACUUM_INDEX ) ;
/*
* Report that we are now vacuuming indexes and the number of indexes to
* vacuum .
*/
progress_start_val [ 0 ] = PROGRESS_VACUUM_PHASE_VACUUM_INDEX ;
progress_start_val [ 1 ] = vacrel - > nindexes ;
pgstat_progress_update_multi_param ( 2 , progress_start_index , progress_start_val ) ;
if ( ! ParallelVacuumIsActive ( vacrel ) )
{
@ -2346,6 +2361,10 @@ lazy_vacuum_all_indexes(LVRelState *vacrel)
old_live_tuples ,
vacrel ) ;
/* Report the number of indexes vacuumed */
pgstat_progress_update_param ( PROGRESS_VACUUM_INDEXES_PROCESSED ,
idx + 1 ) ;
if ( lazy_check_wraparound_failsafe ( vacrel ) )
{
/* Wraparound emergency -- end current index scan */
@ -2380,14 +2399,17 @@ lazy_vacuum_all_indexes(LVRelState *vacrel)
Assert ( allindexes | | VacuumFailsafeActive ) ;
/*
* Increase and report the number of index scans .
* Increase and report the number of index scans . Also , we reset
* PROGRESS_VACUUM_INDEXES_TOTAL and PROGRESS_VACUUM_INDEXES_PROCESSED .
*
* We deliberately include the case where we started a round of bulk
* deletes that we weren ' t able to finish due to the failsafe triggering .
*/
vacrel - > num_index_scans + + ;
pgstat_progress_update_param ( PROGRESS_VACUUM_NUM_INDEX_VACUUMS ,
vacrel - > num_index_scans ) ;
progress_end_val [ 0 ] = 0 ;
progress_end_val [ 1 ] = 0 ;
progress_end_val [ 2 ] = vacrel - > num_index_scans ;
pgstat_progress_update_multi_param ( 3 , progress_end_index , progress_end_val ) ;
return allindexes ;
}
@ -2624,6 +2646,12 @@ lazy_check_wraparound_failsafe(LVRelState *vacrel)
if ( unlikely ( vacuum_xid_failsafe_check ( & vacrel - > cutoffs ) ) )
{
const int progress_index [ ] = {
PROGRESS_VACUUM_INDEXES_TOTAL ,
PROGRESS_VACUUM_INDEXES_PROCESSED
} ;
int64 progress_val [ 2 ] = { 0 , 0 } ;
VacuumFailsafeActive = true ;
/*
@ -2638,6 +2666,9 @@ lazy_check_wraparound_failsafe(LVRelState *vacrel)
vacrel - > do_index_cleanup = false ;
vacrel - > do_rel_truncate = false ;
/* Reset the progress counters */
pgstat_progress_update_multi_param ( 2 , progress_index , progress_val ) ;
ereport ( WARNING ,
( errmsg ( " bypassing nonessential maintenance of table \" %s.%s.%s \" as a failsafe after %d index scans " ,
vacrel - > dbname , vacrel - > relnamespace , vacrel - > relname ,
@ -2664,13 +2695,27 @@ lazy_cleanup_all_indexes(LVRelState *vacrel)
{
double reltuples = vacrel - > new_rel_tuples ;
bool estimated_count = vacrel - > scanned_pages < vacrel - > rel_pages ;
const int progress_start_index [ ] = {
PROGRESS_VACUUM_PHASE ,
PROGRESS_VACUUM_INDEXES_TOTAL
} ;
const int progress_end_index [ ] = {
PROGRESS_VACUUM_INDEXES_TOTAL ,
PROGRESS_VACUUM_INDEXES_PROCESSED
} ;
int64 progress_start_val [ 2 ] ;
int64 progress_end_val [ 2 ] = { 0 , 0 } ;
Assert ( vacrel - > do_index_cleanup ) ;
Assert ( vacrel - > nindexes > 0 ) ;
/* Report that we are now cleaning up indexes */
pgstat_progress_update_param ( PROGRESS_VACUUM_PHASE ,
PROGRESS_VACUUM_PHASE_INDEX_CLEANUP ) ;
/*
* Report that we are now cleaning up indexes and the number of indexes to
* cleanup .
*/
progress_start_val [ 0 ] = PROGRESS_VACUUM_PHASE_INDEX_CLEANUP ;
progress_start_val [ 1 ] = vacrel - > nindexes ;
pgstat_progress_update_multi_param ( 2 , progress_start_index , progress_start_val ) ;
if ( ! ParallelVacuumIsActive ( vacrel ) )
{
@ -2682,6 +2727,10 @@ lazy_cleanup_all_indexes(LVRelState *vacrel)
vacrel - > indstats [ idx ] =
lazy_cleanup_one_index ( indrel , istat , reltuples ,
estimated_count , vacrel ) ;
/* Report the number of indexes cleaned up */
pgstat_progress_update_param ( PROGRESS_VACUUM_INDEXES_PROCESSED ,
idx + 1 ) ;
}
}
else
@ -2691,6 +2740,9 @@ lazy_cleanup_all_indexes(LVRelState *vacrel)
vacrel - > num_index_scans ,
estimated_count ) ;
}
/* Reset the progress counters */
pgstat_progress_update_multi_param ( 2 , progress_end_index , progress_end_val ) ;
}
/*