diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-01-06 14:56:03 +0000 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-01-06 14:56:03 +0000 |
commit | fea5ec52637d5a0c8e1e91518e02c6580ba2e41d (patch) | |
tree | e4c625311f3d6c7aadf6e53590da8380f6e5ca89 | |
parent | d2976357212c645a1a1e11b57dc278f451ee86fb (diff) | |
download | postgresql-fea5ec52637d5a0c8e1e91518e02c6580ba2e41d.tar.gz postgresql-fea5ec52637d5a0c8e1e91518e02c6580ba2e41d.zip |
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.
-rw-r--r-- | src/backend/commands/vacuumlazy.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index e809b0e56fb..a7a9065f103 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.50.4.6 2007/09/24 03:53:12 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.50.4.7 2009/01/06 14:56:03 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -176,8 +176,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 */ |