Add progressive backoff to XactLockTableWait functions - Mailing list pgsql-hackers

From Xuneng Zhou
Subject Add progressive backoff to XactLockTableWait functions
Date
Msg-id CABPTF7XmTrBp8S93a+zQ5M3FhLB6o8kWn9yQ1YnHJqTPT9dRYA@mail.gmail.com
Whole thread Raw
Responses Re: Add progressive backoff to XactLockTableWait functions
Re: Add progressive backoff to XactLockTableWait functions
List pgsql-hackers
Hi hackers,

This patch implements progressive backoff in XactLockTableWait() and
ConditionalXactLockTableWait().

As Kevin reported in this thread [1], XactLockTableWait() can enter a
tight polling loop during logical replication slot creation on standby
servers, sleeping for fixed 1ms intervals that can continue for a long
time. This creates significant CPU overhead.

The patch implements a time-based threshold approach based on Fujii’s
idea [1]: keep sleeping for 1ms until the total sleep time reaches 10
seconds, then start exponential backoff (doubling the sleep duration
each cycle) up to a maximum of 10 seconds per sleep. This balances
responsiveness for normal operations (which typically complete within
seconds) against CPU efficiency for the long waits in some logical
replication scenarios.

[1] https://www.postgresql.org/message-id/flat/CAM45KeELdjhS-rGuvN%3DZLJ_asvZACucZ9LZWVzH7bGcD12DDwg%40mail.gmail.com

Best regards,
Xuneng

Attachment

pgsql-hackers by date:

Previous
From: Xuneng Zhou
Date:
Subject: Add new wait event to XactLockTableWait
Next
From: Xuneng Zhou
Date:
Subject: Re: Add CHECK_FOR_INTERRUPTS in polling loop code path in XactLockTableWait