diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 1fb11e6..f86aac0 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -2020,6 +2020,8 @@ lazy_parallel_vacuum_or_cleanup_indexes(LVRelStats *vacrelstats, Relation *Irel,
 	costdelay = VacuumCostTotalDelay;
 	VacuumCostTotalDelay = 0;
 	_nhit=_nmiss=_ndirty=0;
+	VacuumCostBalanceLocal = 0;
+
 	/*
 	 * Join as parallel workers. The leader process alone does that in case where
 	 * no workers launched.
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index bb07a5a..a4725ec 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -1989,6 +1989,7 @@ void
 vacuum_delay_point(void)
 {
 	double	msec = 0;
+	int		nworker = 4; /* Fixed value for POC */
 
 	/* Always check for interrupts */
 	CHECK_FOR_INTERRUPTS();
@@ -2011,12 +2012,14 @@ vacuum_delay_point(void)
 				/* compute new balance by adding the local value */
 				shared_balance = pg_atomic_read_u32(VacuumSharedCostBalance);
 				new_balance = shared_balance + VacuumCostBalance;
-
-				if (new_balance >= VacuumCostLimit)
+				VacuumCostBalanceLocal += VacuumCostBalance;
+				if ((new_balance >= VacuumCostLimit) &&
+					(VacuumCostBalanceLocal > VacuumCostLimit/nworker))
 				{
 					/* compute sleep time based on the shared cost balance */
 					msec = VacuumCostDelay * new_balance / VacuumCostLimit;
 					new_balance %= VacuumCostLimit;
+					VacuumCostBalanceLocal = 0;
 				}
 
 				if (pg_atomic_compare_exchange_u32(VacuumSharedCostBalance,
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index de214f3..f7752a4 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -149,6 +149,7 @@ int _nmiss = 0;
 int _ndirty = 0;
 
 int			VacuumCostBalance = 0;	/* working state for vacuum */
+int			VacuumCostBalanceLocal = 0;
 bool		VacuumCostActive = false;
 
 double		vacuum_cleanup_index_scale_factor;
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 8d95b6e..55f19ec 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -261,6 +261,7 @@ extern int	VacuumPageMiss;
 extern int	VacuumPageDirty;
 
 extern int	VacuumCostBalance;
+extern int	VacuumCostBalanceLocal;
 extern bool VacuumCostActive;
 
 extern double vacuum_cleanup_index_scale_factor;
