Hi all, Thank you for the earlier pushed patch—after testing it, things work well. Per Fujii’s and Kevin’s ideas and suggestions[1], [2], I’ve tried to extend it to add a new wait event and a progressive backoff mechanism for XactLockTableWait in logical replication scenarios.
New wait event • XACT_DONE (“Waiting for a transaction to commit or abort”): This shows up when a standby is blocked waiting for the primary’s XID replay. Progressive backoff • When XactLockTableWait is called from logical replication (oper == XLTW_None), the sleep interval doubles each loop up to one second. • ConditionalXactLockTableWait still uses a fixed 1 ms sleep, since it is only invoked by heap and index operations. With the patch applied, a blocked slot‐creation session on standby now shows: testdb=# SELECT pid, wait_event_type, wait_event, state, query FROM pg_stat_activity WHERE pid = 62774; pid | wait_event_type | wait_event | state | query -------+-----------------+------------+--------+------------------------------------------------------------------ 62774 | IPC | XactDone | active | SELECT * | | | | FROM pg_create_logical_replication_slot('my_slot','pgoutput'); (1 row) Please let me know if you have any feedback or suggestions. [1] https://www.postgresql.org/message-id/422ea29f-2051-441c-aa5d-5eea04a81b95%40oss.nttdata.com [2] https://www.postgresql.org/message-id/CAM45KeF6%2B3GtR7dDTAM-kwpGWpnUmAeg%3Djh0N3cd%3DNGBgvVkkA%40mail.gmail.com
0001-Add-wait-event-and-progressive-backoff-to-XactLockTable.patch
Description: Binary data