diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-03-04 21:51:22 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-03-04 21:51:22 +0000 |
| commit | 391eb5e5b6a78fce5179808379cdae20baedd9c3 (patch) | |
| tree | 754cb44f71f1f7f00c898ef93dcfa0262148c7e7 /src/include/storage/freespace.h | |
| parent | a455c942574f2d6414d49893fe8ee2779c636acb (diff) | |
| download | postgresql-391eb5e5b6a78fce5179808379cdae20baedd9c3.tar.gz | |
Reimplement free-space-map management as per recent discussions.
Adjustable threshold is gone in favor of keeping track of total requested
page storage and doling out proportional fractions to each relation
(with a minimum amount per relation, and some quantization of the results
to avoid thrashing with small changes in page counts). Provide special-
case code for indexes so as not to waste space storing useless page
free space counts. Restructure internal data storage to be a flat array
instead of list-of-chunks; this may cost a little more work in data
copying when reorganizing, but allows binary search to be used during
lookup_fsm_page_entry().
Diffstat (limited to 'src/include/storage/freespace.h')
| -rw-r--r-- | src/include/storage/freespace.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/include/storage/freespace.h b/src/include/storage/freespace.h index 428898bdac..05cf77d761 100644 --- a/src/include/storage/freespace.h +++ b/src/include/storage/freespace.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: freespace.h,v 1.8 2002/09/20 19:56:01 tgl Exp $ + * $Id: freespace.h,v 1.9 2003/03/04 21:51:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -28,6 +28,7 @@ typedef struct PageFreeSpaceInfo } PageFreeSpaceInfo; +/* GUC variables */ extern int MaxFSMRelations; extern int MaxFSMPages; @@ -39,19 +40,26 @@ extern void InitFreeSpaceMap(void); extern int FreeSpaceShmemSize(void); extern BlockNumber GetPageWithFreeSpace(RelFileNode *rel, Size spaceNeeded); -extern void RecordFreeSpace(RelFileNode *rel, BlockNumber page, - Size spaceAvail); extern BlockNumber RecordAndGetPageWithFreeSpace(RelFileNode *rel, BlockNumber oldPage, Size oldSpaceAvail, Size spaceNeeded); -extern void MultiRecordFreeSpace(RelFileNode *rel, - BlockNumber minPage, - int nPages, - PageFreeSpaceInfo *pageSpaces); +extern Size GetAvgFSMRequestSize(RelFileNode *rel); +extern void RecordRelationFreeSpace(RelFileNode *rel, + int nPages, + PageFreeSpaceInfo *pageSpaces); + +extern BlockNumber GetFreeIndexPage(RelFileNode *rel); +extern void RecordIndexFreeSpace(RelFileNode *rel, + int nPages, + BlockNumber *pages); + +extern void FreeSpaceMapTruncateRel(RelFileNode *rel, BlockNumber nblocks); extern void FreeSpaceMapForgetRel(RelFileNode *rel); extern void FreeSpaceMapForgetDatabase(Oid dbid); +extern void PrintFreeSpaceMapStatistics(int elevel); + #ifdef FREESPACE_DEBUG extern void DumpFreeSpace(void); #endif |
