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 1vsjeO-00H5ur-1D for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 15:39:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsjeN-00GccW-1e for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 15:39:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsjeN-00GccH-0R for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 15:39:39 +0000 Received: from relay7-d.mail.gandi.net ([217.70.183.200]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vsjeK-00000001EiE-04zx for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 15:39:38 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id E447344336; Wed, 18 Feb 2026 15:39:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1771429173; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fCWDaxTl495bVfhfjg+78f9fYj3SkDQOHWFETjngaig=; b=lMGXW561A9OIVCSlf2VQM/OE9AbVVWsHezSM9BkKzY4wBmMYk8iZcRpuwF9GVgaeI+0C8q bOeczDvbqMbXw5V2UZ0F2lyt3MxoryIJUmTfleqb32hzIHDk4C04kfb49CLsGFqrAQpMFm G2hWhGWZRZ81MwvNd4Ld8BfTOvZRusmStw4jb8JkWCOgXpRbntT4IzodY6V+LzEzhOd1/Q cA7YIeH74t2COiCEbeAGvBqyEd5lZzKw6jsRfZotUdFKahwRqHf2sNulZjj8bl+0GrR4fj Pj4dsEVH04vR5p6QYUmITnOmIm/FdG4qRg3fOBgaAyJRCo7lUgo5Nop1cFa97Q== Message-ID: <2f7fdaa6-2855-4a49-884c-16b91db9a97b@vondra.me> Date: Wed, 18 Feb 2026 16:39:30 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: index prefetching To: Andres Freund Cc: Peter Geoghegan , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar References: <64a2re223ajj4popowsyu4xekbuvvyfwkrihn5yzyrkwsmsuvp@2lls3tpww5dl> <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> <720560ca-97b9-40a1-ad40-9f9b8a6648e9@vondra.me> Content-Language: en-US From: Tomas Vondra In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: tomas@vondra.me X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvvdeftddvucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefkffggfgfuvfevfhfhjggtgfesthekredttddvjeenucfhrhhomhepvfhomhgrshcugghonhgurhgruceothhomhgrshesvhhonhgurhgrrdhmvgeqnecuggftrfgrthhtvghrnhepuedvvdeifefffeekudeggfdtieeglefggeduheffveeihefggfehgfdvudetffevnecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhqihgupefggeegjeefgeegfeefiedpmhhouggvpehsmhhtphhouhhtpdhnsggprhgtphhtthhopeduuddprhgtphhtthhopegrnhgurhgvshesrghnrghrrgiivghlrdguvgdprhgtphhtthhopehpghessghofihtrdhivgdprhgtphhtthhopehorghlvgigrghnughrvghfvghlihhpvgesghhmrghilhdrtghomhdprhgtphhtthhopehthhhomhgrshhmuhhnrhhosehgmhgrihhlrdgtohhmpdhrtghpthhtohepsgihrghvuhiikedusehgmhgrihhlrdgtohhmpdhrtghpthhto heprhhosggvrhhtmhhhrggrshesghhmrghilhdrtghomh List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2/18/26 05:21, Andres Freund wrote: > Hi, > > On 2026-02-17 22:36:53 +0100, Tomas Vondra wrote: >> On 2/17/26 21:16, Peter Geoghegan wrote: >>> On Tue, Feb 17, 2026 at 2:27 PM Andres Freund wrote: >>>> On 2026-02-17 12:16:23 -0500, Peter Geoghegan wrote: >>>>> On Mon, Feb 16, 2026 at 11:48 AM Andres Freund wrote: >>>>> I agree that the current heuristics (which were invented recently) are >>>>> too conservative. I overfit the heuristics to my current set of >>>>> adversarial queries, as a stopgap measure. >>>> >>>> Are you doing any testing on higher latency storage? I found it to be quite >>>> valuable to use dm_delay to have a disk with reproducible (i.e. not cloud) >>>> higher latency (i.e. not just a local SSD). >>> >>> I sometimes use dm_delay (with the minimum 1ms delay) when testing, >>> but don't do so regularly. Just because it's inconvenient to do so >>> (perhaps not a great reason). >>> >>>> Low latency NVMe can reduce the >>>> penalty of not enough readahead so much that it's hard to spot problems... >>> >>> I'll keep that in mind. >>> >> >> So, what counts as "higher latency" in this context? What delays should >> we consider practical/relevant for testing? > > 0.5-4ms is the range I've seen in various clouds across their reasonable > storage products (i.e. not spinning disks or other ver bulk oriented things). > > Unfortunately dm_delay doesn't support < 1ms delays, but it's still much > better than nothing. > > I've been wondering about teaching AIO to delay IOs (by adding a sleep to > workers and linking a IORING_OP_TIMEOUT submission with the actually intended > IO) to allow testing smaller delays. > Could be useful testing facility, if it's done in a way that does not limit the IO concurrency (i.e. the delay should probably be when consuming the IO, depending on the timestamp of the IO start). > >>> That would make sense. You can already tell when that's happened by >>> comparing the details shown by EXPLAIN ANALYZE against the same query >>> execution on master, but that approach is inconvenient. Automating my >>> microbenchmarks has proven to be important with this project. There's >>> quite a few competing considerations, and it's too easy to improve one >>> query at the cost of regressing another. >>> >> >> What counts as "unconsumed IO"? The IOs the stream already started, but >> then did not consume? That shouldn't be hard, I think. > > Yes, the number of IOs that were started but not consumed. Or, even better, > the number of IOs that completed but were not consumed - but that'd be harder > to get right now. > > I agree that started-but-not-consumed should be pretty easy. > I'll try to add it to the EXPLAIN. regards -- Tomas Vondra