diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-20 19:56:01 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-20 19:56:01 +0000 |
commit | b2735fcd523cbb10851c7752cd9ce2709e8763eb (patch) | |
tree | a12d9659ed6867e95dd788ddc62f37ba1de72536 /src/include/storage/freespace.h | |
parent | de96cd5e3a9ca487fc8d8ebb9fcd13f499f87043 (diff) |
Performance improvement for MultiRecordFreeSpace on large relations ---
avoid O(N^2) behavior. Problem noted and fixed by Stephen Marshall <smarshall@wsicorp.com>,
with some help from Tom Lane.
Diffstat (limited to 'src/include/storage/freespace.h')
-rw-r--r-- | src/include/storage/freespace.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/include/storage/freespace.h b/src/include/storage/freespace.h index 339759f0ca1..428898bdac2 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.7 2002/06/20 20:29:52 momjian Exp $ + * $Id: freespace.h,v 1.8 2002/09/20 19:56:01 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -18,6 +18,16 @@ #include "storage/relfilenode.h" +/* + * exported types + */ +typedef struct PageFreeSpaceInfo +{ + BlockNumber blkno; /* which page in relation */ + Size avail; /* space available on this page */ +} PageFreeSpaceInfo; + + extern int MaxFSMRelations; extern int MaxFSMPages; @@ -37,10 +47,8 @@ extern BlockNumber RecordAndGetPageWithFreeSpace(RelFileNode *rel, Size spaceNeeded); extern void MultiRecordFreeSpace(RelFileNode *rel, BlockNumber minPage, - BlockNumber maxPage, int nPages, - BlockNumber *pages, - Size *spaceAvail); + PageFreeSpaceInfo *pageSpaces); extern void FreeSpaceMapForgetRel(RelFileNode *rel); extern void FreeSpaceMapForgetDatabase(Oid dbid); |