mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
When using the WAL-logged CREATE DATABASE strategy, bulk extend.
This should improve performance, and was suggested by Andres Freund. Back-patch to v15 to keep the code consistent across branches. Dilip Kumar Discussion: http://postgr.es/m/C3458199-FEDD-4356-865A-08DFAA5D4065@anarazel.de Discussion: http://postgr.es/m/CAFiTN-sJ0vVpJrZ=R5M+g7Tr8=NN4wKOtrqOcDEsfFfnZgivVA@mail.gmail.com
This commit is contained in:
parent
27f1774aac
commit
3e63e8462f
@ -3712,6 +3712,7 @@ RelationCopyStorageUsingBuffer(RelFileLocator srclocator,
|
||||
bool use_wal;
|
||||
BlockNumber nblocks;
|
||||
BlockNumber blkno;
|
||||
PGAlignedBlock buf;
|
||||
BufferAccessStrategy bstrategy_src;
|
||||
BufferAccessStrategy bstrategy_dst;
|
||||
|
||||
@ -3730,6 +3731,14 @@ RelationCopyStorageUsingBuffer(RelFileLocator srclocator,
|
||||
if (nblocks == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Bulk extend the destination relation of the same size as the source
|
||||
* relation before starting to copy block by block.
|
||||
*/
|
||||
memset(buf.data, 0, BLCKSZ);
|
||||
smgrextend(smgropen(dstlocator, InvalidBackendId), forkNum, nblocks - 1,
|
||||
buf.data, true);
|
||||
|
||||
/* This is a bulk operation, so use buffer access strategies. */
|
||||
bstrategy_src = GetAccessStrategy(BAS_BULKREAD);
|
||||
bstrategy_dst = GetAccessStrategy(BAS_BULKWRITE);
|
||||
@ -3747,7 +3756,7 @@ RelationCopyStorageUsingBuffer(RelFileLocator srclocator,
|
||||
srcPage = BufferGetPage(srcBuf);
|
||||
|
||||
/* Use P_NEW to extend the destination relation. */
|
||||
dstBuf = ReadBufferWithoutRelcache(dstlocator, forkNum, P_NEW,
|
||||
dstBuf = ReadBufferWithoutRelcache(dstlocator, forkNum, blkno,
|
||||
RBM_NORMAL, bstrategy_dst,
|
||||
permanent);
|
||||
LockBuffer(dstBuf, BUFFER_LOCK_EXCLUSIVE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user