From: Simon Riggs Date: Tue, 13 Nov 2012 18:58:35 +0000 (-0300) Subject: Clarify docs on hot standby lock release X-Git-Tag: REL9_0_11~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=759340c8f52416cfcd934a25f52894359a5ebed7;p=thirdparty%2Fpostgresql.git Clarify docs on hot standby lock release Andres Freund and Simon Riggs --- diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 1dd238f55bf..7805213b31d 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1394,6 +1394,11 @@ GetSnapshotData(Snapshot snapshot) * We don't worry about updating other counters, we want to keep this as * simple as possible and leave GetSnapshotData() as the primary code for * that bookkeeping. + * + * Note that if any transaction has overflowed its cached subtransactions + * then there is no real need include any subtransactions. That isn't a + * common enough case to worry about optimising the size of the WAL record, + * and we may wish to see that data for diagnostic purposes anyway. */ RunningTransactions GetRunningTransactionData(void) diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 80c595a04be..df9a9a495b6 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -513,6 +513,10 @@ CheckRecoveryConflictDeadlock(void) * RelationLockList, so we can keep track of the various entries made by * the Startup process's virtual xid in the shared lock table. * + * We record the lock against the top-level xid, rather than individual + * subtransaction xids. This means AccessExclusiveLocks held by aborted + * subtransactions are not released as early as possible on standbys. + * * List elements use type xl_rel_lock, since the WAL record type exactly * matches the information that we need to keep track of. * @@ -646,8 +650,8 @@ StandbyReleaseAllLocks(void) /* * StandbyReleaseOldLocks - * Release standby locks held by XIDs that aren't running, as long - * as they're not prepared transactions. + * Release standby locks held by top-level XIDs that aren't running, + * as long as they're not prepared transactions. */ void StandbyReleaseOldLocks(int nxids, TransactionId *xids)