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 1wHJ0a-0072nS-27 for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 10:16:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wHJ0Z-00DQgq-0f for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 10:16:07 +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 1wHJ0Y-00DQgg-2n for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 10:16:06 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHJ0W-00000003Jko-1ef1 for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 10:16:06 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2b2ea1b3962so56968685ad.0 for ; Mon, 27 Apr 2026 03:16:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777284962; cv=none; d=google.com; s=arc-20240605; b=QgBnKfSDE24Gl27nHevww4lkIv0zvd27pjIGcAKqCTUSv0qMEmS0LRABgwG2lonzAI 0MbSJwhdZd00Jc2LNycMNoiR5NDJ3CRWo0tLc+NAw2ZJ6ia7NwRCrdimIjm7YXiuij1j mUkJEEKFZQzlAa9mlidIV2lWSJPGgkeNCqs7UKksAoGGIAwpph0mEv7bJJbQ5f3z2+oP 9v1jpjFIwp2DiHvB6uCQuQS3UBz3kah9s4CmIjQ5hPcxat8fLWFILbnoM2hyikoPTFYA foMTeJBeto6KjMyjiCmlYU0jETdCT24K8oxnX5GQCN0TXLXg1lDCwqyviRN1M7i9uK/S dwdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=c/25punAZ7EM595UIb8LIXPRpJNlX3GEA5KoskZruAo=; fh=Dsb2fjNa41aAEymveeTQNq1xlLaCHt7wR97ivSG3IsQ=; b=d5Z6tO4qYeItZt11N87q1g1f6Xy13p5+SZBIx7vvX7pnRFnehd6KC3+NYebATcup9K hk1NfX0GDlpx0fbEWEb9k9pvip17SsTyHJrzIgllaIaqWBxW/t5y4bAp6GcnvRPWVKyE zpjRQ+kkAUqp1DxF1VwrI1dwHcVFLBhVqT7piDOoHy5CgWCmkD3YKHAPzA8Ke2vauhJa HgN/5Z+zsDbSrOGlNM2PEH2jfblvpheitX/7qDAb+2cZCcbCNoyRWwq3Lbo8YnmzC8ZP lJHskiF0ngceGEU9AqSuoOYSpi5zBBn/M7i4GHH81VEmT2epCCiJm+3NvjRctX0RJiVu xrsQ==; 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=1777284962; x=1777889762; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=c/25punAZ7EM595UIb8LIXPRpJNlX3GEA5KoskZruAo=; b=Fd1vfDXwkkhq7bHqNKjH2LIP7zGxI2gLF9nodGlWSJIyTLq15KKm11gqoeA7YYXAGR vUG5gSW0fOcUPt3EobRrhwBPEQRyCNOqAbLbsoo8u90uA3fYLN1t7+BwBid+mI+UB8kA do98jWj/KpJofwpXPBikvwj+gS1DHiuYrio69O5fPk4IGl0P2REgrnIMjRXGIB+Wh/Ve OogO+N5nnUJ0li2XMamm32kuk/MsHjYfvEGiErwUcTu198l+R7IQkE3e/tzqIIozn18c YlzwPDx0JmJ9TVTjCtpfiNiRCGxOzKvUxxN2Ro9p773lv6OmXXaF6+i+iPH6k+CyYC4b 87SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777284962; x=1777889762; h=content-transfer-encoding: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=c/25punAZ7EM595UIb8LIXPRpJNlX3GEA5KoskZruAo=; b=gpJfkwRh0quu+j3BnIJpdDnciNOPWErGfARNrOssJimLQ3ScUsQzjgvIfRRqeGlU18 iJWWPfhoGdHa1zdfojGvuVWyfg/ljChfZYyx0dHeTXwLjc/uYCIN74dxObJtkWbgy8MA wiozWoStNTj585vcYKOw0t5kJFxMCz2kKbsytSlBMiYFG15Ikg1jR+4hU2AllRU8mbyw s0xZR73hZWRh4fH5E2qz2OA2/KIDVgyUeQfSqxNJAiwSFutv1S7h+NIcqpO/8mtHIGm8 PFGP9Ups4Ll8irsioafbJXiKitE0kYTshTbveucXHCaO7HubundQ2Xx/RpQkw9uxmeHD fNog== X-Gm-Message-State: AOJu0YywErrBX6d2VZSVYStS8m0tToWGuWyPFzDGAh1CLJA8nbfpMzK6 vzhgs1ZTRE0qvljLhIFoPTgyrFnHTHaT4YDlc0thK5hwDLuE8YuEkQ1exueRxoFUPYLH/B9nTKu ZUybiWBtKW4mmlkGZR1pyqr2QzZ7ZUxc= X-Gm-Gg: AeBDietN2tTmIhSM/LEouBFEvQsZS+srcKtlPi2Xzc01OuDXchjEjV2lR/Z9TDe/8KC KL6em7kCbNOwBBWcfxAfFjOzoQ5ma2iyHFThp+9v7sCKPGgQFY2MZ+vAX6DNhU7tTE/XfzhAXkL 8bJ4RgY4fgEa9EZ4F0RydGS6+rel0UiUtEkYY9Tj1f6lYaUjpU+yxhc92nf6hgZWvhVlGv1N9QQ XHQvzpKGa2Y/m0C2xUJpH0mY51rGcYLGSbJ9lrLAyeGG34S5K4nfV65DMdPtY8pGB4LeBl3E9q0 uJtDyWz5kIXkt7bdDZ7kzjxEmL8XIi+6Sa4DXHOK6dH2qumOMoxSASdP7+HGE27n X-Received: by 2002:a17:902:9696:b0:2b0:4fb6:85ce with SMTP id d9443c01a7336-2b5f9f7cec4mr307030195ad.21.1777284962327; Mon, 27 Apr 2026 03:16:02 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: shveta malik Date: Mon, 27 Apr 2026 15:45:51 +0530 X-Gm-Features: AVHnY4KmhLWMOUxTIKGuTCiJgtJwxTfLHxM4UuazL7o4tR2bYR3zx0n7SA4NBMY Message-ID: Subject: Re: [Patch]: Fix excessive ProcArrayLock acquisitions with subscription max_retention_duration=0 To: SATYANARAYANA NARLAPURAM Cc: PostgreSQL Hackers , Amit Kapila , "Zhijie Hou (Fujitsu)" , shveta malik Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, Apr 27, 2026 at 3:18=E2=80=AFPM 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. > > I agree with the problem statement. I can see it in my debugging. > > 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. Yes, this should work. Let's see what others have to say on this. > > 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) > > Just curious, how did you catch this problem? Did it show up in any of your profiling reports? thanks Shveta