Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9e5fe4d

Browse files
Fix timing of Startup CLOG and MultiXact during Hot Standby
Patch by me, bug report by Chris Redekop, analysis by Florian Pflug
1 parent5e4dd5f commit9e5fe4d

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

‎src/backend/access/transam/clog.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,25 @@ StartupCLOG(void)
490490
*/
491491
ClogCtl->shared->latest_page_number=pageno;
492492

493+
LWLockRelease(CLogControlLock);
494+
}
495+
496+
/*
497+
* This must be called ONCE at the end of startup/recovery.
498+
*/
499+
void
500+
TrimCLOG(void)
501+
{
502+
TransactionIdxid=ShmemVariableCache->nextXid;
503+
intpageno=TransactionIdToPage(xid);
504+
505+
LWLockAcquire(CLogControlLock,LW_EXCLUSIVE);
506+
507+
/*
508+
* Re-Initialize our idea of the latest page number.
509+
*/
510+
ClogCtl->shared->latest_page_number=pageno;
511+
493512
/*
494513
* Zero out the remainder of the current clog page. Under normal
495514
* circumstances it should be zeroes already, but it seems at least

‎src/backend/access/transam/multixact.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,7 @@ StartupMultiXact(void)
15681568

15691569
/*
15701570
* Zero out the remainder of the current members page.See notes in
1571-
*StartupCLOG() for motivation.
1571+
*TrimCLOG() for motivation.
15721572
*/
15731573
entryno=MXOffsetToMemberEntry(offset);
15741574
if (entryno!=0)

‎src/backend/access/transam/xlog.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6384,10 +6384,12 @@ StartupXLOG(void)
63846384
oldestActiveXID=checkPoint.oldestActiveXid;
63856385
Assert(TransactionIdIsValid(oldestActiveXID));
63866386

6387-
/* Startup commit log and related stuff */
6387+
/*
6388+
* Startup commit log and subtrans only. Other SLRUs are not
6389+
* maintained during recovery and need not be started yet.
6390+
*/
63886391
StartupCLOG();
63896392
StartupSUBTRANS(oldestActiveXID);
6390-
StartupMultiXact();
63916393

63926394
/*
63936395
* If we're beginning at a shutdown checkpoint, we know that
@@ -6876,16 +6878,21 @@ StartupXLOG(void)
68766878
TransactionIdRetreat(ShmemVariableCache->latestCompletedXid);
68776879

68786880
/*
6879-
* Start up the commit log andrelated stuff, too. In hot standby mode we
6880-
*did this already before WAL replay.
6881+
* Start up the commit log andsubtrans, if not already done for
6882+
*hot standby.
68816883
*/
68826884
if (standbyState==STANDBY_DISABLED)
68836885
{
68846886
StartupCLOG();
68856887
StartupSUBTRANS(oldestActiveXID);
6886-
StartupMultiXact();
68876888
}
68886889

6890+
/*
6891+
* Perform end of recovery actions for any SLRUs that need it.
6892+
*/
6893+
StartupMultiXact();
6894+
TrimCLOG();
6895+
68896896
/* Reload shared-memory state for prepared transactions */
68906897
RecoverPreparedTransactions();
68916898

‎src/include/access/clog.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ extern Size CLOGShmemSize(void);
4040
externvoidCLOGShmemInit(void);
4141
externvoidBootStrapCLOG(void);
4242
externvoidStartupCLOG(void);
43+
externvoidTrimCLOG(void);
4344
externvoidShutdownCLOG(void);
4445
externvoidCheckPointCLOG(void);
4546
externvoidExtendCLOG(TransactionIdnewestXact);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp