From: Simon Riggs Date: Tue, 13 Nov 2012 19:12:20 +0000 (-0300) Subject: Skip searching for subxact locks at commit. X-Git-Tag: REL9_2_2~37 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=31541778b612fd59257a2bf571229f400d35ecf0;p=postgresql Skip searching for subxact locks at commit. At commit all standby locks are released for the top-level transaction, so searching for locks for each subtransaction is both pointless and costly (N^2) in the presence of many AccessExclusiveLocks. --- diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 5f85fe2011..58bb28177d 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -4629,9 +4629,11 @@ xact_redo_commit_internal(TransactionId xid, XLogRecPtr lsn, /* * Release locks, if any. We do this for both two phase and normal one * phase transactions. In effect we are ignoring the prepare phase and - * just going straight to lock release. + * just going straight to lock release. At commit we release all locks + * via their top-level xid only, so no need to provide subxact list, + * which will save time when replaying commits. */ - StandbyReleaseLockTree(xid, nsubxacts, sub_xids); + StandbyReleaseLockTree(xid, 0, NULL); } /* Make sure files supposed to be dropped are dropped */