Commit 89f373bf authored by Heikki Linnakangas's avatar Heikki Linnakangas

Index FSMs needs to be vacuumed as well. Report by Jeff Davis.

parent 557faa4f
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.22 2008/09/30 10:52:10 heikki Exp $ * $PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.23 2008/10/06 08:04:11 heikki Exp $
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -744,6 +744,9 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) ...@@ -744,6 +744,9 @@ ginvacuumcleanup(PG_FUNCTION_ARGS)
totFreePages = totFreePages - stats->pages_removed; totFreePages = totFreePages - stats->pages_removed;
} }
/* Finally, vacuum the FSM */
IndexFreeSpaceMapVacuum(info->index);
stats->pages_free = totFreePages; stats->pages_free = totFreePages;
if (needLock) if (needLock)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.37 2008/09/30 10:52:10 heikki Exp $ * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.38 2008/10/06 08:04:11 heikki Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -619,6 +619,9 @@ gistvacuumcleanup(PG_FUNCTION_ARGS) ...@@ -619,6 +619,9 @@ gistvacuumcleanup(PG_FUNCTION_ARGS)
totFreePages = totFreePages - stats->std.pages_removed; totFreePages = totFreePages - stats->std.pages_removed;
} }
/* Finally, vacuum the FSM */
IndexFreeSpaceMapVacuum(info->index);
/* return statistics */ /* return statistics */
stats->std.pages_free = totFreePages; stats->std.pages_free = totFreePages;
if (needLock) if (needLock)
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.162 2008/09/30 10:52:10 heikki Exp $ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.163 2008/10/06 08:04:11 heikki Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -574,6 +574,9 @@ btvacuumcleanup(PG_FUNCTION_ARGS) ...@@ -574,6 +574,9 @@ btvacuumcleanup(PG_FUNCTION_ARGS)
btvacuumscan(info, stats, NULL, NULL, 0); btvacuumscan(info, stats, NULL, NULL, 0);
} }
/* Finally, vacuum the FSM */
IndexFreeSpaceMapVacuum(info->index);
/* /*
* During a non-FULL vacuum it's quite possible for us to be fooled by * During a non-FULL vacuum it's quite possible for us to be fooled by
* concurrent page splits into double-counting some index tuples, so * concurrent page splits into double-counting some index tuples, so
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/freespace/indexfsm.c,v 1.1 2008/09/30 10:52:13 heikki Exp $ * $PostgreSQL: pgsql/src/backend/storage/freespace/indexfsm.c,v 1.2 2008/10/06 08:04:11 heikki Exp $
* *
* *
* NOTES: * NOTES:
...@@ -90,3 +90,12 @@ IndexFreeSpaceMapTruncate(Relation rel, BlockNumber nblocks) ...@@ -90,3 +90,12 @@ IndexFreeSpaceMapTruncate(Relation rel, BlockNumber nblocks)
{ {
FreeSpaceMapTruncateRel(rel, nblocks); FreeSpaceMapTruncateRel(rel, nblocks);
} }
/*
* IndexFreeSpaceMapVacuum - scan and fix any inconsistencies in the FSM
*/
void
IndexFreeSpaceMapVacuum(Relation rel)
{
FreeSpaceMapVacuum(rel);
}
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/storage/indexfsm.h,v 1.1 2008/09/30 10:52:14 heikki Exp $ * $PostgreSQL: pgsql/src/include/storage/indexfsm.h,v 1.2 2008/10/06 08:04:11 heikki Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -16,12 +16,12 @@ ...@@ -16,12 +16,12 @@
#include "utils/rel.h" #include "utils/rel.h"
extern void InitIndexFreeSpaceMap(Relation rel);
extern BlockNumber GetFreeIndexPage(Relation rel); extern BlockNumber GetFreeIndexPage(Relation rel);
extern void RecordFreeIndexPage(Relation rel, BlockNumber page); extern void RecordFreeIndexPage(Relation rel, BlockNumber page);
extern void RecordUsedIndexPage(Relation rel, BlockNumber page); extern void RecordUsedIndexPage(Relation rel, BlockNumber page);
extern void InitIndexFreeSpaceMap(Relation rel);
extern void IndexFreeSpaceMapTruncate(Relation rel, BlockNumber nblocks); extern void IndexFreeSpaceMapTruncate(Relation rel, BlockNumber nblocks);
extern void IndexFreeSpaceMapVacuum(Relation rel);
#endif /* INDEXFSM_H */ #endif /* INDEXFSM_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment