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.94.2) (envelope-from ) id 1v8zXz-008FOE-7M for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 11:19:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v8zXx-005vSZ-6P for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 11:19:56 +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.94.2) (envelope-from ) id 1v8zXw-005vSR-Rn for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 11:19:55 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v8zXt-002JPH-24 for pgsql-hackers@postgresql.org; Wed, 15 Oct 2025 11:19:55 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-780fe73e337so77470457b3.1 for ; Wed, 15 Oct 2025 04:19:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760527192; x=1761131992; darn=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=3II/IWSRfa1bkr4W6XBPySvbTHMp5t9mtRNmkHj1zEg=; b=FRhXON/cjrmidncivg1B81Cb41hgmRrHmIsJTqsm7KzkfB8P8eVGsf0jkQNMB6V6+i KQuhARG14RSj9sOgQWrYKAd+l8ivJUkr2LuDcsCxTVi4VJLJOdbSgP3IumyYzwV9/x4r OLnehCYwM/Q2i+3SABGlreFrUF04NH9HM6bQqMYLknb32L0TN81uFVQrihMk39KaA+N9 JpWyA+8BHkDJYq7+Tdycj6Tpkpr+W3k9l87PQVrktkqugAClH7jMz4sCH2+hr7dcvESo jm3pZkUJHRHukLSKOGVcgeAmd2Mo1BfeXoADqhVrgUXnktiPYW7NEyPv9w30X8p9GH7q x7gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760527192; x=1761131992; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3II/IWSRfa1bkr4W6XBPySvbTHMp5t9mtRNmkHj1zEg=; b=vCAc0t+3nT7hl+fOJ5GxW4ybIKcO4jaKLcQSwvZ8N7Lba6AHSGpXzP2Y9mSW2mCRAz s/0Ci/F/7VHJEA4+Wxfnzxmji2hxs9dNjry5msIsHWz/MX7Wfql5RFAstFSZiQUeqP2x QdAkC4AQdvTBpAEDd5i1I9NFBKbOxYzuv//p6QodSxtoIFokUa9gK7X2FVGcaGvtXBCF Yw40lx9hXxhHpu2ePAgBMqzp9d0fIAQPv/zX+Mb8D05n3aP9ewW8tmK/DXfgM/A7Re5C M7tU+ez+cTkNszdFiPcnn/y9ZTbpqSRUfaM4s7FAP8gIFD94qSEyjUGYr66z6t193BXb p77g== X-Forwarded-Encrypted: i=1; AJvYcCXI79CnFaG2wYC0efqUw8LJEzkbesuxxh3TKeOGJoTDUWRbsXGlSESAuhATMdfkmkiK6hu/b3TIJgQU4s2q@postgresql.org X-Gm-Message-State: AOJu0YxxZvb2/GN2ThWkqIQgVuOJbmhhwCgsW/trtS7dqra9bS71oYXN a018u/GkOK+o8cG27avTDhVulGhkNetshly9z9E4kOaoRWPHzyJ1HoGL+kLLwrCQj2Epkv+BeSh vb3XE3gvmdbKuAqqN1xmw6QJctieEMyKxA+In1LlpbQ== X-Gm-Gg: ASbGncv6GOXPx2ZSBPkpABm8SCxeXNoi2cLUEJZT96jreP21h7hDyXhgBRWuhR5jgAG GYOmXlyfDQh1Lt7h1G7mtmZKXpyBVAM20VmJLHz/GcQdB0xCHpqVOFhb4gWwbws5oElOCRHRdZS rXtWS60GW7PNZF62vp1jfvrxs3+lEnkCedOmlN1A48Uj23o4FPGZZc38AQjE6wGgnY0OATfSC+d Hjy4+BZ4LZGtu4gcg3N1BuJbgbzV5QpcDQmwCGKcghtARdn X-Google-Smtp-Source: AGHT+IHNn3Y7ur3tJ9zQoNJ/YVZZ7hGMU15wFlHsTyeFnUaMyvnR3To7t0c6BwTGVwpsfw4hWUwyL2+IV0UCMCbJuRg= X-Received: by 2002:a05:690e:247:b0:635:4ecd:75a3 with SMTP id 956f58d0204a3-63ccb8efe8cmr17890110d50.49.1760527192191; Wed, 15 Oct 2025 04:19:52 -0700 (PDT) MIME-Version: 1.0 References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <2a30bcf1-aee2-4b07-a302-11e4b350adaf@app.fastmail.com> In-Reply-To: <2a30bcf1-aee2-4b07-a302-11e4b350adaf@app.fastmail.com> From: Arseniy Mukhin Date: Wed, 15 Oct 2025 14:19:40 +0300 X-Gm-Features: AS18NWD1WCqI43nn0BICQcIDvE599EvasRw2zD3xAHyLcKKlWjlIEPSAA7lWw8s Message-ID: Subject: Re: Optimize LISTEN/NOTIFY To: Joel Jacobson Cc: Tom Lane , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000e8e3e0064130addf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e8e3e0064130addf Content-Type: text/plain; charset="UTF-8" Hi, Thank you for working on it! Benchmarking looks great. There are several points: I tried the patch and it seems listeners sometimes don't receive notifications. To reproduce it you can try to listen to the channel in one psql session and send notifications from another psql session. But all tests are fine, so I tried to write a TAP test to reproduce it. It passes on master and fails with the patch, so looks like it's real. Please find the repro in attachments. I added the TAP test to amcheck module just for simplicity. I think "Direct advancement" is a good idea. But the way it's implemented now has a concurrency bug. Listeners store its current position in the local variable 'pos' during the reading in asyncQueueReadAllNotifications() and don't hold NotifyQueueLock. It means that some notifier can directly advance the listener's position while the listener has an old value in the local variable. The same time we use listener positions to find out the limit we can truncate the queue in asyncQueueAdvanceTail(). asyncQueueAdvanceTail() doesn't know that listeners have a local copy of their positions and can truncate the queue beyond that which means listeners can try to read notifications from the truncated segment. I managed to reproduce it locally. Please let me know if more details are needed. BTW error message a bit confusing: 2025-10-15 13:32:15.570 MSK [261845] ERROR: could not access status of transaction 0 2025-10-15 13:32:15.570 MSK [261845] DETAIL: Could not open file "pg_notify/000000000000001": No such file or directory. Looks like all slru IO errors have an error message about transaction status. It's not a problem really as we have a directory path in the log. Best regards, Arseniy Mukhin --000000000000e8e3e0064130addf Content-Type: application/octet-stream; name="listen-notify-test.patch.nocfbot" Content-Disposition: attachment; filename="listen-notify-test.patch.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgrw8rbx0 RnJvbSBjMmZjNTBiNjNjYjY1MTdlNTFhMTIwM2JiY2U4N2YyOWVhMDljYTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNSBPY3QgMjAyNSAxMTo0MzoyNiArMDMwMApTdWJqZWN0OiBb UEFUQ0hdIGxpc3RlbiBub3RpZnkgdGVzdAoKLS0tCiBjb250cmliL2FtY2hlY2svbWVzb24uYnVp bGQgICAgICAgICAgICB8ICAxICsKIGNvbnRyaWIvYW1jaGVjay90LzAwN19saXN0ZW4tbm90aWZ5 LnBsIHwgMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYW1jaGVjay90LzAwN19s aXN0ZW4tbm90aWZ5LnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxk IGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCmluZGV4IDFmMGMzNDdlZDU0Li5hZDViNGIw MWY3OSAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCisrKyBiL2NvbnRy aWIvYW1jaGVjay9tZXNvbi5idWlsZApAQCAtNTAsNiArNTAsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAndC8wMDRfdmVyaWZ5X25idHJlZV91bmlxdWUucGwnLAogICAgICAgJ3QvMDA1X3BpdHIucGwn LAogICAgICAgJ3QvMDA2X3ZlcmlmeV9naW4ucGwnLAorICAgICAgJ3QvMDA3X2xpc3Rlbi1ub3Rp ZnkucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8w MDdfbGlzdGVuLW5vdGlmeS5wbCBiL2NvbnRyaWIvYW1jaGVjay90LzAwN19saXN0ZW4tbm90aWZ5 LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYzlkMGNhMDcxZAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYW1jaGVjay90LzAwN19saXN0ZW4tbm90aWZ5LnBs CkBAIC0wLDAgKzEsMzMgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBG QVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7CisKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZTsKKwor IworIyBUZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3Rlc3QnKTsKKyRub2RlLT5pbml0KCk7Ciskbm9kZS0+c3RhcnQoKTsKKworbXkgJGxpc3Rl bmVyID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKworJGxpc3RlbmVyLT5x dWVyeV9zYWZlKCJMSVNURU4gY2giKTsKKworJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCJO T1RJRlkgY2gsJ2FhJyIpOworbXkgJHJlcyA9ICRsaXN0ZW5lci0+cXVlcnlfc2FmZSgic2VsZWN0 ICdBQUFBQUFBQUEnOyIpOworCitsaWtlKCRyZXMsIHFyL0FzeW5jaHJvbm91cyBub3RpZmljYXRp b24gImNoIiB3aXRoIHBheWxvYWQgImFhIiByZWNlaXZlZCBmcm9tIHNlcnZlciBwcm9jZXNzLyk7 CisKKyRsaXN0ZW5lci0+cXVpdCgpOworCisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40My4wCgo= --000000000000e8e3e0064130addf--