public inbox for [email protected]
help / color / mirror / Atom feedFrom: 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