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 1vLGsj-00Ae4M-1i for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 08: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 1vLGsi-004psV-0L for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 08:16:08 +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 1vLGsh-004psN-2U for pgsql-hackers@lists.postgresql.org; Tue, 18 Nov 2025 08:16:08 +0000 Received: from mail-qk1-x736.google.com ([2607:f8b0:4864:20::736]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLGsf-0008vZ-28 for pgsql-hackers@postgresql.org; Tue, 18 Nov 2025 08:16:07 +0000 Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-8b2ea2b9631so193271085a.3 for ; Tue, 18 Nov 2025 00:16:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763453763; x=1764058563; darn=postgresql.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=6j7ucUSUT6VIEdQ15JqoxTv/KRNLghLHKA+AwCV+hCk=; b=TqLhHGxdJz13NbJ9Ovbb+cdsI/lDbOtJOYn+bDHk3ndpu3DVnvuXpu0z0Vgd63qiTl UkBlJS57anbufWwx+VYrxKB0aK9AACQ4qKrBlh9FQUurM+Pnp2YyXUAFe4hVFladKUh7 uvKBoc2jRpf0Hejw+pMEt6hVbD7Sj0E6Mx462kcFpBZDUpWtbigbx9P9uvaDjCAedu+v Op7PmRNhyDZHX/83o4Td8PSV6gGaBalEcDjkuocKmnTQgWMZEvIZBwQONwQbQ87bZ2a/ spq3udK7jUQilcdZjn+PgE95gnZJ9vbDmhkQT9EH3gt62Sja5xz6qShSYF/qlngWKduy yekQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763453763; x=1764058563; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=6j7ucUSUT6VIEdQ15JqoxTv/KRNLghLHKA+AwCV+hCk=; b=L50EA+cymoX1pBhnaFlF7lQLVjMY9o/qVcWE+T/VHpKc1RmtOxlYNZ9Il3JqXkJUHD YGr17CqOCFcOfEywMFCG06JjeZ4N+s8QtzgZcm3iN3wV7xW29NMTvAE4epIO3jeusIwM nhe/Ls5ZwWo9rQ7RTjqU9xxsGX5KQZm0/ahgB8o24m28HQASiarg3TXf3G1/Gk4z3cZH N1f4Cz12b3UM1mObpfbyFT9aq+q+znzmKh0Dqtuf10Y/7qnKKQi+NQvUVwm6FNwjQLnd fjftjaY2658asivfRdNj45FbAw8D4iaym+Ct274jlXkl+m63PSFkU8IpK7kNdcn8sv5i Z06g== X-Gm-Message-State: AOJu0YySR+GnCObdyCFnsEUq2mIYN8506XDhEO/qNGRFyHPPwMR7lI+D ebtN1T8so6NPgdp8TJP6Q2qXl+QuONxZ06+OvTlZXunay6OT7Th39Nl/ X-Gm-Gg: ASbGncuUUJHDmfOT6t3B0PaTewjd++0kW03oV5XgP/mkuKDBb3tC4vxuFMIexR+rqT4 AZqnzTznsK7jb+7dfcaCDaDUfwMWIlQgDap+K2HJadnFvK+TObLlIQIpT0GH1ZKBPiYD89QibnB NQ54luNSoMOsHU+6MuXR+jKbQ0nJzvmfvDthtdVcYI2kQZrm1m2El55r4frAK5xLqWRHWv4cZk9 bAv81Ecy/VToe4xqG0/PZk0jBcIZv/hAjWWL+JG9ivTTc8QjGsW5qPWNQsy2hThnCJeCHFk11qJ RRKh/L26Ixgz923L4GoBkC/HnPRcPDexFPZZ+J3gCVLRtcrOCAy26kubiw87C8HjvoScv7i/ro4 jCJ/l3gd4r4ocrJrrjabIvPST83yxGq8VsgT0Y+NM0RmxP1oEJRg5r8fSvTnKEz3rVZm0xuDx7V ep3WL4qtGEGpPtggnfdF58 X-Google-Smtp-Source: AGHT+IHSkwdgCr2O2J1HxtQ5AdEtmQHR2OfnSySezqqbkKbXJf8sarNi+/gEHbTPzwiYQwjUx/2Qlw== X-Received: by 2002:a05:620a:c51:b0:8a4:e7f6:bf57 with SMTP id af79cd13be357-8b2c313f911mr1910307685a.5.1763453763130; Tue, 18 Nov 2025 00:16:03 -0800 (PST) Received: from smtpclient.apple ([209.127.78.222]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b2aeecb087sm1158817585a.26.2025.11.18.00.16.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 18 Nov 2025 00:16:02 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81\)) Subject: Re: Optimize LISTEN/NOTIFY From: Chao Li In-Reply-To: Date: Tue, 18 Nov 2025 16:15:23 +0800 Cc: pgsql-hackers Content-Transfer-Encoding: quoted-printable Message-Id: <798A8F4A-DC41-4FE9-9BED-38E0DF2193F3@gmail.com> 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> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C052@gmail.com> <0BCA1C2D-B92C-459E-B1A6-6D06BA4C62CF@gmail.com> <55d24cbb-e9ef-491f-a99b-b3dbd7cecdf9@app.fastmail.com> <38574cad-e90d-47b7-a015-753bb6bbc360@app.fastmail.com> <66631FB7-5BEA-4ED5-A694-9AD8B9CCFEE8@gmail.com> <4b7b49a5-5e1a-44a8-93e0-60457d15cb1d@app.fastmail.com> <82DEA2B6-6FC5-4A79-BDE3-1FD72F104A6E@gmail.com> <38de1036-d8cf-420c-b845-edb5a946b191@app.fastmail.com> <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> <7556f0d4-03fd-451a-bd34-5f62b424319a@app.fastmail.com> <290910DE-9A03-4AE6-B348-073D5DA96ACC@gmail.com> <4B243750-12BE-4C16-A769-A803268F40E3@gmail.com> <4605CAD6-69D5-4082-B96C-91FC0DE5399D@gmail.com> <294e1641-d658-4d43-8671-60e8ff860532@app.fastmail.com> <26d4dd6a-cfc5-4efc-9704-9cd3216ed712@app.fastmail.com> <7456ec96-7a9c-45a0-988e-ba1c7f9ec937@app.fastmail.com> <0253b822-e8fd-4067-ab24-23493c115a2a@app.fastmail.com> <2eeea4f1-1b4f-430c-8571-544da04f08dc@app.fastmail.com> To: Joel Jacobson X-Mailer: Apple Mail (2.3826.700.81) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi Joel, > On Nov 16, 2025, at 05:53, Joel Jacobson wrote: >=20 > The attached v28 is the same as v27, except some comments have been > fixed to accurately reflect the code. >=20 > = /Joel<0001-optimize_listen_notify-v28.patch><0002-optimize_listen_notify-v= 28.patch> Thanks for the continuous effort on this patch. Finally, I got some = time, after revisiting v28 throughoutly, I think it=E2=80=99s much = better now. Just got 2 more comments: 1 ``` + if (asyncQueueControl->channelHashDSH =3D=3D = DSHASH_HANDLE_INVALID) + { + /* Initialize dynamic shared hash table for channel hash = */ + channelDSA =3D = dsa_create(LWTRANCHE_NOTIFY_CHANNEL_HASH); + dsa_pin(channelDSA); + dsa_pin_mapping(channelDSA); + channelHash =3D dshash_create(channelDSA, = &channelDSHParams, NULL); + + /* Store handles in shared memory for other backends to = use */ + asyncQueueControl->channelHashDSA =3D = dsa_get_handle(channelDSA); + asyncQueueControl->channelHashDSH =3D + dshash_get_hash_table_handle(channelHash); + } + else if (!channelHash) + { + /* Attach to existing dynamic shared hash table */ + channelDSA =3D = dsa_attach(asyncQueueControl->channelHashDSA); + dsa_pin_mapping(channelDSA); + channelHash =3D dshash_attach(channelDSA, = &channelDSHParams, + = asyncQueueControl->channelHashDSH, + = NULL); + } ``` DSA is created and pinned by the first backend and every backend = isa_in_mapping, but I don=E2=80=99t see any unpin, is it a problem? If = unpin is not needed, why are they provided? 2 ``` + entry =3D dshash_find(channelHash, &key, false); + } + + if (entry =3D=3D NULL) + continue; /* No listeners = registered for this channel */ + + listeners =3D (ProcNumber *) dsa_get_address(channelDSA, + = entry->listenersArray); + + for (int j =3D 0; j < entry->numListeners; j++) + { + ProcNumber i =3D listeners[j]; + int32 pid; + QueuePosition pos; + + if (QUEUE_BACKEND_WAKEUP_PENDING(i)) + continue; + + pos =3D QUEUE_BACKEND_POS(i); + pid =3D QUEUE_BACKEND_PID(i); + + /* Skip if caught up */ if (QUEUE_POS_EQUAL(pos, QUEUE_HEAD)) continue; + + Assert(pid !=3D InvalidPid); + + QUEUE_BACKEND_WAKEUP_PENDING(i) =3D true; + pids[count] =3D pid; + procnos[count] =3D i; + count++; } - else + + dshash_release_lock(channelHash, entry); ``` SignalBackends() now holds the dshash entry lock for long time, while = other backend=E2=80=99s LISTEN/UNLISTEN all needs to acquire the lock. = So, my suggestion is to copy the listeners array to local then quickly = release the lock. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/