mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Create VXID locks "lazily" in the main lock table.
Instead of entering them on transaction startup, we materialize them only when someone wants to wait, which will occur only during CREATE INDEX CONCURRENTLY. In Hot Standby mode, the startup process must also be able to probe for conflicting VXID locks, but the lock need never be fully materialized, because the startup process does not use the normal lock wait mechanism. Since most VXID locks never need to touch the lock manager partition locks, this can significantly reduce blocking contention on read-heavy workloads. Patch by me. Review by Jeff Davis.
This commit is contained in:
@ -201,7 +201,7 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
|
||||
standbyWait_us = STANDBY_INITIAL_WAIT_US;
|
||||
|
||||
/* wait until the virtual xid is gone */
|
||||
while (!ConditionalVirtualXactLockTableWait(*waitlist))
|
||||
while (!VirtualXactLock(*waitlist, false))
|
||||
{
|
||||
/*
|
||||
* Report via ps if we have been waiting for more than 500 msec
|
||||
|
Reference in New Issue
Block a user