diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2012-11-13 15:56:28 -0300 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2012-11-13 15:56:28 -0300 |
commit | f66e7ab6db30b7893493c4dfd5d642bef93b350f (patch) | |
tree | 1f983796718805dd17b4c1b5dab327f9d487bf61 | |
parent | 8805ff6580621d0daee350826de5211d6bb36ec3 (diff) | |
download | postgresql-f66e7ab6db30b7893493c4dfd5d642bef93b350f.tar.gz postgresql-f66e7ab6db30b7893493c4dfd5d642bef93b350f.zip |
Clarify docs on hot standby lock release
Andres Freund and Simon Riggs
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 5 | ||||
-rw-r--r-- | src/backend/storage/ipc/standby.c | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index a3b0540aea7..371b1045a13 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1565,6 +1565,11 @@ ProcArrayInstallImportedXmin(TransactionId xmin, TransactionId sourcexid) * 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 8863a5c9a7f..8205b4135e4 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -510,6 +510,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. * @@ -643,8 +647,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) |