diff options
| author | Robert Haas | 2016-04-08 06:04:46 +0000 |
|---|---|---|
| committer | Robert Haas | 2016-04-08 06:04:46 +0000 |
| commit | 719c84c1be51f3d3fe6049b77ddbaa0c4b58a9a9 (patch) | |
| tree | c2f4b1501655e50339e3365f267fcce00fd06bbb /src/include | |
| parent | 8643b91ecf8f47a1307df4a00d66b2fceada0d6f (diff) | |
Extend relations multiple blocks at a time to improve scalability.
Contention on the relation extension lock can become quite fierce when
multiple processes are inserting data into the same relation at the same
time at a high rate. Experimentation shows the extending the relation
multiple blocks at a time improves scalability.
Dilip Kumar, reviewed by Petr Jelinek, Amit Kapila, and me.
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/storage/freespace.h | 4 | ||||
| -rw-r--r-- | src/include/storage/lmgr.h | 3 | ||||
| -rw-r--r-- | src/include/storage/lock.h | 2 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/include/storage/freespace.h b/src/include/storage/freespace.h index 19dcb8d964..16c052b8bc 100644 --- a/src/include/storage/freespace.h +++ b/src/include/storage/freespace.h @@ -32,5 +32,9 @@ extern void XLogRecordPageWithFreeSpace(RelFileNode rnode, BlockNumber heapBlk, extern void FreeSpaceMapTruncateRel(Relation rel, BlockNumber nblocks); extern void FreeSpaceMapVacuum(Relation rel); +extern void UpdateFreeSpaceMap(Relation rel, + BlockNumber firtsBlkNum, + BlockNumber lastBlkNum, + Size freespace); #endif /* FREESPACE_H_ */ diff --git a/src/include/storage/lmgr.h b/src/include/storage/lmgr.h index 975b6f8155..8288e7d505 100644 --- a/src/include/storage/lmgr.h +++ b/src/include/storage/lmgr.h @@ -53,6 +53,9 @@ extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode); /* Lock a relation for extension */ extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode); extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode); +extern bool ConditionalLockRelationForExtension(Relation relation, + LOCKMODE lockmode); +extern int RelationExtensionLockWaiterCount(Relation relation); /* Lock a page (currently only used within indexes) */ extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode); diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index b26427dea3..efa75ecca9 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -574,6 +574,8 @@ extern void RememberSimpleDeadLock(PGPROC *proc1, PGPROC *proc2); extern void InitDeadLockChecking(void); +extern int LockWaiterCount(const LOCKTAG *locktag); + #ifdef LOCK_DEBUG extern void DumpLocks(PGPROC *proc); extern void DumpAllLocks(void); |
