public inbox for [email protected]  
help / color / mirror / Atom feed
From: Andrey V. Lepikhov <[email protected]>
Subject: [PATCH 4/4] SP-GiST-Optimal-WAL-Usage
Date: Tue, 2 Apr 2019 09:43:54 +0500

---
 src/backend/access/rmgrdesc/spgdesc.c   |  5 ----
 src/backend/access/spgist/spgdoinsert.c | 12 ++++-----
 src/backend/access/spgist/spginsert.c   | 24 +++--------------
 src/backend/access/spgist/spgxlog.c     | 35 -------------------------
 src/include/access/spgxlog.h            |  1 -
 5 files changed, 10 insertions(+), 67 deletions(-)

diff --git a/src/backend/access/rmgrdesc/spgdesc.c b/src/backend/access/rmgrdesc/spgdesc.c
index 37af31a764..40c1c8b3f9 100644
--- a/src/backend/access/rmgrdesc/spgdesc.c
+++ b/src/backend/access/rmgrdesc/spgdesc.c
@@ -24,8 +24,6 @@ spg_desc(StringInfo buf, XLogReaderState *record)
 
 	switch (info)
 	{
-		case XLOG_SPGIST_CREATE_INDEX:
-			break;
 		case XLOG_SPGIST_ADD_LEAF:
 			{
 				spgxlogAddLeaf *xlrec = (spgxlogAddLeaf *) rec;
@@ -88,9 +86,6 @@ spg_identify(uint8 info)
 
 	switch (info & ~XLR_INFO_MASK)
 	{
-		case XLOG_SPGIST_CREATE_INDEX:
-			id = "CREATE_INDEX";
-			break;
 		case XLOG_SPGIST_ADD_LEAF:
 			id = "ADD_LEAF";
 			break;
diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c
index 0d07b8b291..c34c44cd8b 100644
--- a/src/backend/access/spgist/spgdoinsert.c
+++ b/src/backend/access/spgist/spgdoinsert.c
@@ -289,7 +289,7 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple,
 
 	MarkBufferDirty(current->buffer);
 
-	if (RelationNeedsWAL(index))
+	if (RelationNeedsWAL(index) && !state->isBuild)
 	{
 		XLogRecPtr	recptr;
 		int			flags;
@@ -516,7 +516,7 @@ moveLeafs(Relation index, SpGistState *state,
 	MarkBufferDirty(current->buffer);
 	MarkBufferDirty(nbuf);
 
-	if (RelationNeedsWAL(index))
+	if (RelationNeedsWAL(index) && !state->isBuild)
 	{
 		XLogRecPtr	recptr;
 
@@ -1334,7 +1334,7 @@ doPickSplit(Relation index, SpGistState *state,
 		saveCurrent.buffer = InvalidBuffer;
 	}
 
-	if (RelationNeedsWAL(index))
+	if (RelationNeedsWAL(index) && !state->isBuild)
 	{
 		XLogRecPtr	recptr;
 		int			flags;
@@ -1531,7 +1531,7 @@ spgAddNodeAction(Relation index, SpGistState *state,
 
 		MarkBufferDirty(current->buffer);
 
-		if (RelationNeedsWAL(index))
+		if (RelationNeedsWAL(index) && !state->isBuild)
 		{
 			XLogRecPtr	recptr;
 
@@ -1644,7 +1644,7 @@ spgAddNodeAction(Relation index, SpGistState *state,
 
 		MarkBufferDirty(saveCurrent.buffer);
 
-		if (RelationNeedsWAL(index))
+		if (RelationNeedsWAL(index) && !state->isBuild)
 		{
 			XLogRecPtr	recptr;
 			int			flags;
@@ -1840,7 +1840,7 @@ spgSplitNodeAction(Relation index, SpGistState *state,
 
 	MarkBufferDirty(current->buffer);
 
-	if (RelationNeedsWAL(index))
+	if (RelationNeedsWAL(index) && !state->isBuild)
 	{
 		XLogRecPtr	recptr;
 
diff --git a/src/backend/access/spgist/spginsert.c b/src/backend/access/spgist/spginsert.c
index 390ad9ac51..0c3608ad8a 100644
--- a/src/backend/access/spgist/spginsert.c
+++ b/src/backend/access/spgist/spginsert.c
@@ -22,6 +22,7 @@
 #include "access/tableam.h"
 #include "access/xlog.h"
 #include "access/xloginsert.h"
+#include "access/generic_xlog.h"
 #include "catalog/index.h"
 #include "miscadmin.h"
 #include "storage/bufmgr.h"
@@ -105,26 +106,6 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
 	SpGistInitBuffer(nullbuffer, SPGIST_LEAF | SPGIST_NULLS);
 	MarkBufferDirty(nullbuffer);
 
-	if (RelationNeedsWAL(index))
-	{
-		XLogRecPtr	recptr;
-
-		XLogBeginInsert();
-
-		/*
-		 * Replay will re-initialize the pages, so don't take full pages
-		 * images.  No other data to log.
-		 */
-		XLogRegisterBuffer(0, metabuffer, REGBUF_WILL_INIT | REGBUF_STANDARD);
-		XLogRegisterBuffer(1, rootbuffer, REGBUF_WILL_INIT | REGBUF_STANDARD);
-		XLogRegisterBuffer(2, nullbuffer, REGBUF_WILL_INIT | REGBUF_STANDARD);
-
-		recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_CREATE_INDEX);
-
-		PageSetLSN(BufferGetPage(metabuffer), recptr);
-		PageSetLSN(BufferGetPage(rootbuffer), recptr);
-		PageSetLSN(BufferGetPage(nullbuffer), recptr);
-	}
 
 	END_CRIT_SECTION();
 
@@ -151,6 +132,9 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
 
 	SpGistUpdateMetaPage(index);
 
+	if (RelationNeedsWAL(index))
+		log_relation(index);
+
 	result = (IndexBuildResult *) palloc0(sizeof(IndexBuildResult));
 	result->heap_tuples = reltuples;
 	result->index_tuples = buildstate.indtuples;
diff --git a/src/backend/access/spgist/spgxlog.c b/src/backend/access/spgist/spgxlog.c
index 71836ee8a5..ebe6ae8715 100644
--- a/src/backend/access/spgist/spgxlog.c
+++ b/src/backend/access/spgist/spgxlog.c
@@ -72,38 +72,6 @@ addOrReplaceTuple(Page page, Item tuple, int size, OffsetNumber offset)
 			 size);
 }
 
-static void
-spgRedoCreateIndex(XLogReaderState *record)
-{
-	XLogRecPtr	lsn = record->EndRecPtr;
-	Buffer		buffer;
-	Page		page;
-
-	buffer = XLogInitBufferForRedo(record, 0);
-	Assert(BufferGetBlockNumber(buffer) == SPGIST_METAPAGE_BLKNO);
-	page = (Page) BufferGetPage(buffer);
-	SpGistInitMetapage(page);
-	PageSetLSN(page, lsn);
-	MarkBufferDirty(buffer);
-	UnlockReleaseBuffer(buffer);
-
-	buffer = XLogInitBufferForRedo(record, 1);
-	Assert(BufferGetBlockNumber(buffer) == SPGIST_ROOT_BLKNO);
-	SpGistInitBuffer(buffer, SPGIST_LEAF);
-	page = (Page) BufferGetPage(buffer);
-	PageSetLSN(page, lsn);
-	MarkBufferDirty(buffer);
-	UnlockReleaseBuffer(buffer);
-
-	buffer = XLogInitBufferForRedo(record, 2);
-	Assert(BufferGetBlockNumber(buffer) == SPGIST_NULL_BLKNO);
-	SpGistInitBuffer(buffer, SPGIST_LEAF | SPGIST_NULLS);
-	page = (Page) BufferGetPage(buffer);
-	PageSetLSN(page, lsn);
-	MarkBufferDirty(buffer);
-	UnlockReleaseBuffer(buffer);
-}
-
 static void
 spgRedoAddLeaf(XLogReaderState *record)
 {
@@ -976,9 +944,6 @@ spg_redo(XLogReaderState *record)
 	oldCxt = MemoryContextSwitchTo(opCtx);
 	switch (info)
 	{
-		case XLOG_SPGIST_CREATE_INDEX:
-			spgRedoCreateIndex(record);
-			break;
 		case XLOG_SPGIST_ADD_LEAF:
 			spgRedoAddLeaf(record);
 			break;
diff --git a/src/include/access/spgxlog.h b/src/include/access/spgxlog.h
index 6527fc9eb1..8199b3f250 100644
--- a/src/include/access/spgxlog.h
+++ b/src/include/access/spgxlog.h
@@ -18,7 +18,6 @@
 #include "storage/off.h"
 
 /* XLOG record types for SPGiST */
-#define XLOG_SPGIST_CREATE_INDEX	0x00
 #define XLOG_SPGIST_ADD_LEAF		0x10
 #define XLOG_SPGIST_MOVE_LEAFS		0x20
 #define XLOG_SPGIST_ADD_NODE		0x30
-- 
2.17.1


--------------58E4AA393B5F48ED79D1D18E
Content-Type: application/sql;
 name="test.sql"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="test.sql"

XGVjaG8gJ0dJTiBXQUwgZGlmZiB0ZXN0JwpcbyAvZGV2L251bGwKRFJPUCBUQUJMRSBJRiBF
WElTVFMgZ2luX3Rlc3RfdGJsOwpTRUxFQ1Qgc2V0c2VlZCguNDMpOwpDUkVBVEUgVEFCTEUg
Z2luX3Rlc3RfdGJsKGkgaW50NFtdKSB3aXRoIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYp
OwoKSU5TRVJUIElOVE8gZ2luX3Rlc3RfdGJsIFNFTEVDVCBhcnJheVtyYW5kb20oKSoxMDAw
MDAsIHJhbmRvbSgpKjEwMDAsIGddIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwMDAp
IGc7CgpTRUxFQ1QgIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSBBUyBwcmV2X2xzbjsg
XGdzZXQKQ1JFQVRFIElOREVYIGdpbl90ZXN0X2lkeCBPTiBnaW5fdGVzdF90YmwgVVNJTkcg
Z2luIChpKQogIFdJVEggKGZhc3R1cGRhdGUgPSBvbiwgZ2luX3BlbmRpbmdfbGlzdF9saW1p
dCA9IDQwOTYpOwpTRUxFQ1QgIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKTo6cGdfbHNu
IEFTIGxzbjsgXGdzZXQKU0VMRUNUIHBnX3dhbF9sc25fZGlmZig6J2xzbic6OnBnX2xzbiwg
OidwcmV2X2xzbic6OnBnX2xzbikgQVMgd2FsX2RpZmY7IFxnc2V0ClxvClNFTEVDVCBwZ19z
aXplX3ByZXR0eSg6d2FsX2RpZmY6Om51bWVyaWMpOwoKLS0gClxlY2hvICdHSVNUIFdBTCBk
aWZmIHRlc3QnClxvIC9kZXYvbnVsbApEUk9QIFRBQkxFIElGIEVYSVNUUyBnaXN0X3BvaW50
X3RibDsKU0VMRUNUIHNldHNlZWQoLjQzKTsKQ1JFQVRFIFRBQkxFIGdpc3RfcG9pbnRfdGJs
KGlkIGludDQsIHAgcG9pbnQpOwoKSU5TRVJUIElOVE8gZ2lzdF9wb2ludF90YmwgKGlkLCBw
KQpTRUxFQ1QgZywgcG9pbnQocmFuZG9tKCkqMTAwMCwgcmFuZG9tKCkqMTAwMCkgRlJPTSBn
ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwMCkgZzsKClNFTEVDVCAgcGdfY3VycmVudF93YWxf
aW5zZXJ0X2xzbigpIEFTIHByZXZfbHNuOyBcZ3NldApDUkVBVEUgSU5ERVggZ2lzdF9wb2lu
dGlkeCBPTiBnaXN0X3BvaW50X3RibCBVU0lORyBnaXN0KHApOwpTRUxFQ1QgIHBnX2N1cnJl
bnRfd2FsX2luc2VydF9sc24oKTo6cGdfbHNuIEFTIGxzbjsgXGdzZXQKU0VMRUNUIHBnX3dh
bF9sc25fZGlmZig6J2xzbic6OnBnX2xzbiwgOidwcmV2X2xzbic6OnBnX2xzbikgQVMgd2Fs
X2RpZmY7IFxnc2V0ClxvClNFTEVDVCBwZ19zaXplX3ByZXR0eSg6d2FsX2RpZmY6Om51bWVy
aWMpOwoKLS0gClxlY2hvICdTUC1HSVNUIFdBTCBkaWZmIHRlc3QnClxvIC9kZXYvbnVsbAoK
ZHJvcCB0YWJsZSBzcGdpc3RfcG9pbnRfdGJsOwpjcmVhdGUgdGFibGUgc3BnaXN0X3BvaW50
X3RibChpZCBpbnQ0LCBwIHBvaW50KTsKClNFTEVDVCBzZXRzZWVkKC40Myk7CgpJTlNFUlQg
SU5UTyBzcGdpc3RfcG9pbnRfdGJsIChpZCwgcCkKU0VMRUNUIGcsIHBvaW50KHJhbmRvbSgp
KjEwMDAsIHJhbmRvbSgpKjEwMDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMDAp
IGc7CgpTRUxFQ1QgIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSBBUyBwcmV2X2xzbjsg
XGdzZXQKQ1JFQVRFIElOREVYIHNwZ2lzdF9wb2ludF9pZHggT04gc3BnaXN0X3BvaW50X3Ri
bCBVU0lORyBzcGdpc3QocCk7ClNFTEVDVCAgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigp
OjpwZ19sc24gQVMgbHNuOyBcZ3NldApTRUxFQ1QgcGdfd2FsX2xzbl9kaWZmKDonbHNuJzo6
cGdfbHNuLCA6J3ByZXZfbHNuJzo6cGdfbHNuKSBBUyB3YWxfZGlmZjsgXGdzZXQKXG8KU0VM
RUNUIHBnX3NpemVfcHJldHR5KDp3YWxfZGlmZjo6bnVtZXJpYyk7CgovKgptYXN0ZXI6Cj09
PT09PT0KCkdJTiBXQUwgZGlmZiB0ZXN0CiBwZ19zaXplX3ByZXR0eSAKLS0tLS0tLS0tLS0t
LS0tLQogMzQ3IE1CCigxIHJvdykKCkdJU1QgV0FMIGRpZmYgdGVzdAogcGdfc2l6ZV9wcmV0
dHkgCi0tLS0tLS0tLS0tLS0tLS0KIDE1NyBNQgooMSByb3cpCgpTUC1HSVNUIFdBTCBkaWZm
IHRlc3QKIHBnX3NpemVfcHJldHR5IAotLS0tLS0tLS0tLS0tLS0tCiAxMTkgTUIKKDEgcm93
KQoKcGF0Y2hlZDoKPT09PT09PT0KCkdJTiBXQUwgZGlmZiB0ZXN0CiBwZ19zaXplX3ByZXR0
eSAKLS0tLS0tLS0tLS0tLS0tLQogNjYgTUIKKDEgcm93KQoKR0lTVCBXQUwgZGlmZiB0ZXN0
CiBwZ19zaXplX3ByZXR0eSAKLS0tLS0tLS0tLS0tLS0tLQogNDMgTUIKKDEgcm93KQoKU1At
R0lTVCBXQUwgZGlmZiB0ZXN0CiBwZ19zaXplX3ByZXR0eSAKLS0tLS0tLS0tLS0tLS0tLQog
MzggTUIKKDEgcm93KQoKKi8K
--------------58E4AA393B5F48ED79D1D18E--





view thread (7+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: [PATCH 4/4] SP-GiST-Optimal-WAL-Usage
  In-Reply-To: <no-message-id-1883177@localhost>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox