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 1vLYf2-003JKB-0c for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 03:15:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLYf0-00AIFF-2T for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 03:15:11 +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 1vLYf0-00AIF7-0f for pgsql-hackers@lists.postgresql.org; Wed, 19 Nov 2025 03:15:10 +0000 Received: from fhigh-b1-smtp.messagingengine.com ([202.12.124.152]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLYey-000I1W-0b for pgsql-hackers@postgresql.org; Wed, 19 Nov 2025 03:15:10 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id 51FF67A0145; Tue, 18 Nov 2025 22:15:05 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Tue, 18 Nov 2025 22:15:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1763522105; x=1763608505; bh=DOG1SUkjppDZanDGwBjmc/1dxkydnRzQRn2eW93/IYI=; b= OgyanCEMWAwB/XhnM93xFZy81Y9OgnBoszqkXlWQNaCRTssr/vbOwEIW8ImFaKxs 5fqlCw40X2poA5G27SKuh3azH+/3EZwKV3kksktYacOPoDV+VB3W1zWu8yZc7t7E afgvC3heQL4m80RPehAAUlnIz0QYZZm7z7/q3RnchHYAXUj5QStKgQv/g2OKDFpd /n/ODXmdPjdjHd2GOMQVPp6k2h/y0uYuFOEsWXJ0TuwLLGzEyFJgYDOIWQczEV/j uAZdMa9rucMpo4tBDbFOd8P8o4dNKLL0MDg4dp8IJBQUisBTXlJpSrnfqbx4CAKi 7p/egd5+Ucqlj3PN6rgxZA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1763522105; x= 1763608505; bh=DOG1SUkjppDZanDGwBjmc/1dxkydnRzQRn2eW93/IYI=; b=P qebNRZ4adr7w2DhmnIzNYiQdKOu8KQ/u1GemtjTUoKHZFDaR5vkXFCoC5DAdmbcp AaqZRctfBsB94/HGz2yww7GLr42AKw7qoEZCySflV/Dgio2D/9FxPo6gMovQMDlK rRRMu03kyqIF3MWTSr/oR12fwmOpe6tQRLCAuYdSeoaspVG3cZ5KLgrivEKDjUVS TLTfK/P4rrFqM6IVoF6rlzqbQmrqeMgUd340kP6nkif1Glx/kkBUgUjslRrDJaPj 96lHVwoHHJAMqY0/BJ9dyw6UxaiVLXDgJDCZWI7OoaX74EOz69iRVSTOgqEw1Oxr XGYnN4nV82xRac4S+P1iw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvvdeftdelucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtgfesthhqre dtredtjeenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestgho mhhpihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpefggfeuheefheeufeegkeeife ffhffgvefftdduuefhfeelteegleehhfdtieevgfenucevlhhushhtvghrufhiiigvpedt necurfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpd hnsggprhgtphhtthhopedvpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehlihdr vghvrghnrdgthhgrohesghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrg gtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id BA62018E0069; Tue, 18 Nov 2025 22:15:04 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Wed, 19 Nov 2025 04:14:44 +0100 From: "Joel Jacobson" To: "Chao Li" Cc: pgsql-hackers Message-Id: In-Reply-To: <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> <798A8F4A-DC41-4FE9-9BED-38E0DF2193F3@gmail.com> Subject: Re: Optimize LISTEN/NOTIFY 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 Tue, Nov 18, 2025, at 09:15, Chao Li wrote: > Thanks for the continuous effort on this patch. Finally, I got some=20 > time, after revisiting v28 throughoutly, I think it=E2=80=99s much bet= ter now.=20 Thanks for reviewing. > Just got 2 more comments: > ... > DSA is created and pinned by the first backend and every backend=20 > isa_in_mapping, but I don=E2=80=99t see any unpin, is it a problem? If= unpin is=20 > not needed, why are they provided? No, this is not a problem. The channel hash area is pinned "so that it will continue to exist even if all backends detach from it", via dsa_pin(). Each backend's mapping lives for session lifetime via dsa_pin_mapping(). We never need to unpin either. This follows the same pattern as e.g. logicalrep_launcher_attach_dshmem() in launcher.c. dsm_unpin_mapping() was added in f7102b0 (2014), but I cannot find any use of it in the sources, I think it's there mostly for API completeness. > SignalBackends() now holds the dshash entry lock for long time, while=20 > other backend=E2=80=99s LISTEN/UNLISTEN all needs to acquire the lock.= So, my=20 > suggestion is to copy the listeners array to local then quickly releas= e=20 > the lock. Trying to optimize this further would mean increased code complexity, since we would then have to worry and reason about stale reads. I only think we should consider this if we find this to actually be a bottleneck with the design, and my guess is that it's usually not because: 1. dshash_find(..., false) in SignalBackends takes a shared lock, so multiple concurrent SignalBackends() calls can read simultaneously. 2. The loop in SignalBackends is already I/O free, the region where we do dshash_find(..., false) is within the same region that we hold the exclusive lock; we're doing the expensive signaling after all locks have been released. 3. We're already looping over numListeners while holding exclusive lock on the channel in both Exec_ListenCommit and Exec_UnlistenCommit, so what we're doing in SignalBackends isn't any worse. 4. We're not locking the entire channel hash, only the partition for one channel at a time. Just to be sure, I will do some LISTEN/UNLISTEN benchmarking to investigate how the locking affects performance, and then we can evaluate. /Joel