Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wHPMJ-0079Ka-1O for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 17:02:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wHPMH-00EjUB-1N for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 17:02:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wHPMH-00EjU2-0J for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 17:02:57 +0000 Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHPMF-00000003N18-0J2N for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 17:02:56 +0000 Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-56f70865797so5625983e0c.1 for ; Mon, 27 Apr 2026 10:02:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777309373; cv=none; d=google.com; s=arc-20240605; b=g1+9YqIpCIlOUrd38yCrFdNIwzWXW8fq+ZTtl/85vmVI4mvo/d6/c10Vi/CX4xld3c bmc6DhV3ekT65Wa8rFQDuw4/+hGW7iqijKrHFHedWM6JS7FK9EUyAaYnycHsS2xlowBP 1f8HLMzpmhlvZNqV58R+hC8H4vf9psgkobp6yCp6JiQg321gbDPNzE6h1RQPsOB6eDE9 FItygAWr6fty6v7+Jm5YIZFvFg3DvJ2n5H1dUiXgV3dIvDXDvtjjUVilv3Kj681yYRys l1MAEtnkTsj5CeJ37DdkfFFXllITCeQjzjkZVguT9RpyVkiRrWBQpZy+3g9jJO6zRW3M 1YWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=PUNnEcY2LgBVkRm/EpZkoDpQmws5mDqha3Q2qg7jWrQ=; fh=3KhY0XMclv5RnzXL77EFns1F3ntx8GmLcd602zzkK6M=; b=igbriUVCNFApcHo1coyduukV2XDhAeVHrNYo8Fh9VnVqpy0PIw8suKXujN94jXs6QY MDGhdq4zaGzfpTbp5Tfw2hsBRPIUChhnwBqeztuA92QQST/cT4aiVgQ508B7wlVsLgKq EPMYruK80cT8aqljNdSZP15RnzDx1/tpy5wzO+N4Z1xH5iILNrKajmbTplZO2wRITulL C07O0QYoAyl/1MlLJx3HTCYcKzPL5axqsppUvmzZ7s0tlYcs/yjLnb2x20isBK0P2Wg6 hRobbJ6Zavf+RjAvyOJuqSRffwhckUrjq7mDCpbxhycrVttg+O5GXlASplkDMfE0/aYz kA9w==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777309373; x=1777914173; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=PUNnEcY2LgBVkRm/EpZkoDpQmws5mDqha3Q2qg7jWrQ=; b=gSwLWz46EVXpJNkZ59W9fL1Ch3Wbd9f10aCUXsGE6w+HbkTcuPTNOkRMSi61mCY8uZ Jiv/AzINJgy/VvFmOHVEzGOMaC5s0SbMWb+WGv9/Caa+0zanhx2jNK9xW6w3XKgY2P2c awyJTNv1woySvJ7rIWWjgVA6C1LXN8KzNq5eopmSkmJAjKE+APoNxYp293Ue7hmx2Qab 7GHwZ6ABnbDH8IH71siyZkC1DGsiUhG/vSJM2Bo/1WtLuk7VmI5iIEzrDkBRFppj94rz D4E49+ZyzIjm1TPMKgnmKlLGaPWiiI5xw1TfGWKhtMoDM0KKwzHbyjkdlWHUmrS9onw1 tisA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777309373; x=1777914173; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=PUNnEcY2LgBVkRm/EpZkoDpQmws5mDqha3Q2qg7jWrQ=; b=AF1ZSH1AaR3cK+eTJddOC8mDMyqlutkpR8MpXEmw06sFCzay2+A1Hiq5uGO3YQXkQF 4hCFbIXrS0sNytrGzm8zxPN//p71JnaPq1vhVKTSZzQs1h3/UlEwx5VwIjJt2pIHeiK/ EJ5bf5De8kTKEUN8skNeJUri2f+w44u7JJUBTPW/CDyTI7CcR7geWU2gCC72uZWNkPPn ERve8XHOheqFZ4eg2405UiTYK3B/37xYR6GtOCtxfdWlgAPP1shvAEmb+V4EDGJ4DdEg 3SKRg9VR+XlxiUGAVmDfNS+/qHsMnmOZB2IhD1d7VYQIz1PBBr7ItQW1F6U6GEXC6rUR P2wQ== X-Gm-Message-State: AOJu0YwjHxJ2g83qKOWTeIWhlxe6qEwu8XRc+UgtPX0JsX5S3a8IQANA /gBUn7OczAok/ogEFHDanSWG0b8qOcvqCm0EZiHaTgg2t9qw62AZ/ToUXLADACT7iwjKoBMsZZ8 8PRPfzWx/WZzaIibIO/RQ963Lx7KqjBE= X-Gm-Gg: AeBDievYvbtkjemWFOOr8FEKWupK8OCQyOb/K5VqycbvVL/eUG3MSrGNUTRvXaw8rBy 2QLfcZAefVLj6igFMoKM5pK7llm020q0wAKp0yysckn4u22liUzwAraSXwCn7KP1HFQmjXdVwVO 45pDA3cKuNK7tFkIl/ROXeTHV+4d1hgVxauoTw85en99GgUgkMZY7fU/ZwX57ZmkJM7yei7D+tT idleeoGvoS7hjB5hUx/ZmXlwEvhv7R3xATH7yjbwbdWzJcoFmqSv+VwNWLpncnE9QnJ71XJYp3n TA0KgQ0gRdzCDMCkYA== X-Received: by 2002:a05:6122:1c09:b0:56e:8afc:de8c with SMTP id 71dfb90a1353d-573a2b9e8b3mr219538e0c.3.1777309373364; Mon, 27 Apr 2026 10:02:53 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: SATYANARAYANA NARLAPURAM Date: Mon, 27 Apr 2026 10:02:41 -0700 X-Gm-Features: AVHnY4JZ8ZhTO2g91szSeyXy4N3dlBdMPdtK3qmhDQO07DzkAdh1Mo_WZbvRkoQ Message-ID: Subject: Re: [Patch]: Fix excessive ProcArrayLock acquisitions with subscription max_retention_duration=0 To: shveta malik Cc: PostgreSQL Hackers , Amit Kapila Content-Type: multipart/mixed; boundary="000000000000db234406507415ce" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000db234406507415ce Content-Type: multipart/alternative; boundary="000000000000db234306507415cc" --000000000000db234306507415cc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, Apr 27, 2026 at 2:48=E2=80=AFAM shveta malik wrote: > On Mon, Apr 27, 2026 at 2:11=E2=80=AFPM SATYANARAYANA NARLAPURAM > wrote: > > > > Hi Hackers, > > > > When a subscription has retain_dead_tuples enabled with maxretention se= t > > to zero (unlimited retention), adjust_xid_advance_interval() caps > > xid_advance_interval to Min(interval, maxretention). Since maxretentio= n > > is zero, this always collapses the interval to zero milliseconds. > > > > A zero makes TimestampDifferenceExceeds(last_time, now, 0) always > > true in get_candidate_xid(). This causes the apply worker to call > > GetOldestActiveTransactionId() on every single WAL message. This result= s > in > > a huge number of ProcArrayLock acquisitions under moderate write load. > > > > Fix by adding a maxretention > 0 guard to the cap. When maxretention is > zero , > > the exponential back-off in adjust_xid_advance_interval() > > now works correctly, growing the interval from 100 ms toward the 180 s > > ceiling. > > > > Measured with perf uprobe counting GetOldestActiveTransactionId calls > > at ~39K TPS (pgbench, 5 clients): > > > > Before fix: 25,104 calls / 5 s (~5,021/s) > > After fix: 31 calls / 5 s (~6/s) > > > > Thanks for reporting it. I am reveiwing the problem sattement. > Meanwhile can you please look at it, I am getting the following error > while applying the patch on my Ubuntu setup (git am): > > error: corrupt patch at line 22 > Thanks! Please find the updated v2 patch. --000000000000db234306507415cc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Mon, Apr 27, = 2026 at 2:48=E2=80=AFAM shveta malik <shveta.malik@gmail.com> wrote:
On Mon, Apr 27, 2026 at 2:11=E2=80=AFPM SATYA= NARAYANA NARLAPURAM
<satyanar= lapuram@gmail.com> wrote:
>
> Hi Hackers,
>
> When a subscription has retain_dead_tuples enabled with maxretention s= et
> to zero (unlimited retention), adjust_xid_advance_interval() caps
> xid_advance_interval to Min(interval, maxretention).=C2=A0 Since maxre= tention
> is zero, this always collapses the interval to zero milliseconds.
>
> A zero makes=C2=A0 TimestampDifferenceExceeds(last_time, now, 0)=C2=A0= always
> true in get_candidate_xid(). This causes the apply worker to call
> GetOldestActiveTransactionId() on every single WAL message. This resul= ts in
> a huge number of ProcArrayLock acquisitions under moderate write load.=
>
> Fix by adding a maxretention > 0 guard to the cap. When maxretentio= n is zero ,
> the exponential back-off in adjust_xid_advance_interval()
> now works correctly, growing the interval from 100 ms toward the 180 s=
> ceiling.
>
> Measured with perf uprobe counting GetOldestActiveTransactionId calls<= br> > at ~39K TPS (pgbench, 5 clients):
>
>=C2=A0 =C2=A0Before fix: 25,104 calls / 5 s=C2=A0 (~5,021/s)
>=C2=A0 =C2=A0After fix:=C2=A0 =C2=A0 =C2=A031 calls / 5 s=C2=A0 (~6/s)<= br> >

Thanks for reporting it. I am reveiwing the problem sattement.
Meanwhile can you please look at it, I am getting the following error
while applying the patch on my Ubuntu setup (git am):

error: corrupt patch at line 22

Thanks!= Please find the updated v2 patch.=C2=A0
--000000000000db234306507415cc-- --000000000000db234406507415ce Content-Type: application/octet-stream; name="v2-0001-Fix-apply-worker-busy-loop-when-subscription-max_ret.patch" Content-Disposition: attachment; filename="v2-0001-Fix-apply-worker-busy-loop-when-subscription-max_ret.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mohg3htq0 RnJvbSAxOGM0NzM4YWIxMDBlYTI5OTY2Y2VkY2FiY2QxZGUxNjQ1ZmYzNTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBNb24sIDI3IEFwciAyMDI2IDE2OjUzOjM3ICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gRml4IGFwcGx5IHdvcmtlciBidXN5IGxvb3Agd2hlbiBzdWJzY3JpcHRpb24KIG1heF9y ZXRlbnRpb25fZHVyYXRpb24gaXMgemVybwoKV2hlbiBhIHN1YnNjcmlwdGlvbiBoYXMgcmV0YWlu X2RlYWRfdHVwbGVzIGVuYWJsZWQgd2l0aCBtYXhyZXRlbnRpb24gc2V0CnRvIHplcm8gKHVubGlt aXRlZCByZXRlbnRpb24pLCBhZGp1c3RfeGlkX2FkdmFuY2VfaW50ZXJ2YWwoKSBjYXBzCnhpZF9h ZHZhbmNlX2ludGVydmFsIHRvIE1pbihpbnRlcnZhbCwgbWF4cmV0ZW50aW9uKS4gIFNpbmNlIG1h eHJldGVudGlvbgppcyB6ZXJvLCB0aGlzIGFsd2F5cyBjb2xsYXBzZXMgdGhlIGludGVydmFsIHRv IHplcm8gbWlsbGlzZWNvbmRzLgoKQSB6ZXJvIGludGVybmFsIG1ha2VzIFRpbWVzdGFtcERpZmZl cmVuY2VFeGNlZWRzKGxhc3RfdGltZSwgbm93LCAwKQphbHdheXMgdHJ1ZSBpbiBnZXRfY2FuZGlk YXRlX3hpZCgpLiBUaGlzIGNhdXNlcyB0aGUgYXBwbHkgd29ya2VyIHRvIGNhbGwKR2V0T2xkZXN0 QWN0aXZlVHJhbnNhY3Rpb25JZCgpIG9uIGV2ZXJ5IHNpbmdsZSBXQUwgbWVzc2FnZS4gVGhpcyBy ZXN1bHRzCmluIGEgaHVnZSBudW1iZXIgb2YgUHJvY0FycmF5TG9jayBhY3F1aXNpdGlvbnMgdW5k ZXIgbW9kZXJhdGUgd3JpdGUgbG9hZC4KCkZpeCBieSBhZGRpbmcgYSBtYXhyZXRlbnRpb24gPiAw IGd1YXJkIHRvIHRoZSBjYXAuIFdoZW4gbWF4cmV0ZW50aW9uIGlzCnplcm8sIHRoZSBleHBvbmVu dGlhbCBiYWNrLW9mZiBpbiBhZGp1c3RfeGlkX2FkdmFuY2VfaW50ZXJ2YWwoKSBub3cKd29ya3Mg Y29ycmVjdGx5LCBncm93aW5nIHRoZSBpbnRlcnZhbCBmcm9tIDEwMCBtcyB0b3dhcmQgdGhlIDE4 MCBzCmNlaWxpbmcuCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YyB8IDUgKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggOWYyYTE2 YjEuLmRkNmZjMzhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK QEAgLTQ5OTcsOSArNDk5NywxMCBAQCBhZGp1c3RfeGlkX2FkdmFuY2VfaW50ZXJ2YWwoUmV0YWlu RGVhZFR1cGxlc0RhdGEgKnJkdF9kYXRhLCBib29sIG5ld194aWRfZm91bmQpCiAKIAkvKgogCSAq IEVuc3VyZSB0aGUgd2FpdCB0aW1lIHJlbWFpbnMgd2l0aGluIHRoZSBtYXhpbXVtIHJldGVudGlv biB0aW1lIGxpbWl0Ci0JICogd2hlbiByZXRlbnRpb24gaXMgYWN0aXZlLgorCSAqIHdoZW4gcmV0 ZW50aW9uIGlzIGFjdGl2ZS4gIFNraXAgdGhpcyBjYXAgd2hlbiBtYXhyZXRlbnRpb24gaXMgemVy bywKKwkgKiB3aGljaCBtZWFucyB1bmxpbWl0ZWQgcmV0ZW50aW9uIChubyB0aW1lb3V0KS4KIAkg Ki8KLQlpZiAoTXlTdWJzY3JpcHRpb24tPnJldGVudGlvbmFjdGl2ZSkKKwlpZiAoTXlTdWJzY3Jp cHRpb24tPnJldGVudGlvbmFjdGl2ZSAmJiBNeVN1YnNjcmlwdGlvbi0+bWF4cmV0ZW50aW9uID4g MCkKIAkJcmR0X2RhdGEtPnhpZF9hZHZhbmNlX2ludGVydmFsID0gTWluKHJkdF9kYXRhLT54aWRf YWR2YW5jZV9pbnRlcnZhbCwKIAkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5tYXhyZXRlbnRp b24pOwogfQotLSAKMi40My4wCgo= --000000000000db234406507415ce--