]> granicus.if.org Git - postgresql/commitdiff
Skip searching for subxact locks at commit.
authorSimon Riggs <simon@2ndQuadrant.com>
Tue, 13 Nov 2012 19:12:20 +0000 (16:12 -0300)
committerSimon Riggs <simon@2ndQuadrant.com>
Tue, 13 Nov 2012 19:12:20 +0000 (16:12 -0300)
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.

src/backend/access/transam/xact.c

index 5f85fe2011622d15932bab92bb3d6e25ec979249..58bb28177d42b3bda9f106a1b319c8f1eb0f34a8 100644 (file)
@@ -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 */