From: Heikki Linnakangas Date: Tue, 6 Jan 2009 14:55:56 +0000 (+0000) Subject: Fix logic in lazy vacuum to decide if it's worth trying to truncate the heap. X-Git-Tag: REL8_1_16~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fcd3890f3c8fb63a7a2fe1732f0b412b65f45c5e;p=thirdparty%2Fpostgresql.git Fix logic in lazy vacuum to decide if it's worth trying to truncate the heap. If the table was smaller than REL_TRUNCATE_FRACTION (= 16) pages, we always tried to acquire AccessExclusiveLock on it even if there was no empty pages at the end. Report by Simon Riggs. Back-patch all the way to 7.4. --- diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index c82b0740167..f4703ee0175 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -33,7 +33,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.61.2.6 2007/09/24 03:53:06 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.61.2.7 2009/01/06 14:55:56 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -175,8 +175,9 @@ lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt) * number of pages. Otherwise, the time taken isn't worth it. */ possibly_freeable = vacrelstats->rel_pages - vacrelstats->nonempty_pages; - if (possibly_freeable >= REL_TRUNCATE_MINIMUM || - possibly_freeable >= vacrelstats->rel_pages / REL_TRUNCATE_FRACTION) + if (possibly_freeable > 0 && + (possibly_freeable >= REL_TRUNCATE_MINIMUM || + possibly_freeable >= vacrelstats->rel_pages / REL_TRUNCATE_FRACTION)) lazy_truncate_heap(onerel, vacrelstats); /* Update shared free space map with final free space info */