aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2009-01-06 14:56:13 +0000
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2009-01-06 14:56:13 +0000
commit4d79a504942d7e3f58133bc56087137091f3a5b7 (patch)
treedbee2ea974aac96a8bc3009547ebe134c3325567 /src/backend
parent31f6cfb69077979f78fe854730c5d6e20f15a67a (diff)
downloadpostgresql-4d79a504942d7e3f58133bc56087137091f3a5b7.tar.gz
postgresql-4d79a504942d7e3f58133bc56087137091f3a5b7.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.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/commands/vacuumlazy.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c
index 732c6d4bf9f..d7daf1ba3c9 100644
--- a/src/backend/commands/vacuumlazy.c
+++ b/src/backend/commands/vacuumlazy.c
@@ -31,7 +31,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.32.2.2 2007/09/16 02:38:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.32.2.3 2009/01/06 14:56:13 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -161,8 +161,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 */