From: Simon Riggs Date: Tue, 13 Nov 2012 19:00:19 +0000 (-0300) Subject: Skip searching for subxact locks at commit. X-Git-Tag: REL9_3_BETA1~718 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9fad1076da4f3686b16e7c9f137118a3156a43a;p=thirdparty%2Fpostgresql.git 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 c24df3f38c2..10386dadce5 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -4609,9 +4609,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 */