diff options
Diffstat (limited to 'src/backend/access/nbtree/nbtree.c')
-rw-r--r-- | src/backend/access/nbtree/nbtree.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index b423c8fdbe8..87a251915a5 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -12,7 +12,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.110 2004/02/03 17:34:02 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.111 2004/02/06 19:36:17 wieck Exp $ * *------------------------------------------------------------------------- */ @@ -586,6 +586,26 @@ btbulkdelete(PG_FUNCTION_ARGS) CHECK_FOR_INTERRUPTS(); + /* + * If we're called by a cost based vacuum, do the + * napping in case the balance exceeded the limit. + */ + if (VacuumCostActive && !InterruptPending && + VacuumCostBalance >= VacuumCostLimit) + { + int msec; + + msec = VacuumCostNaptime * VacuumCostBalance / VacuumCostLimit; + if (msec < VacuumCostNaptime * 4) + PG_MSLEEP(msec); + else + PG_MSLEEP(VacuumCostNaptime * 4); + + VacuumCostBalance = 0; + + CHECK_FOR_INTERRUPTS(); + } + ndeletable = 0; page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); |