Skip searching for subxact locks at commit.
authorSimon Riggs <[email protected]>
Tue, 13 Nov 2012 19:12:20 +0000 (16:12 -0300)
committerSimon Riggs <[email protected]>
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 */