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 1vYnR7-00ESSE-1Z for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 15:39:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vYnR6-007rVA-0R for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 15:39:32 +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 1vYnR5-007rV1-26 for pgsql-hackers@lists.postgresql.org; Thu, 25 Dec 2025 15:39:32 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vYnR3-002nFi-0o for pgsql-hackers@lists.postgresql.org; Thu, 25 Dec 2025 15:39:31 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b727f452fffso1239102966b.1 for ; Thu, 25 Dec 2025 07:39:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garret-ru.20230601.gappssmtp.com; s=20230601; t=1766677168; x=1767281968; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=aO01A88yrKcP9IM3Oszq4SEtivGE+/01ZSZRbOyohwo=; b=D3wgy3A325tfW6bnqO8Q8sbZQ79YM/oUKEHVLCfeupAWUUgjy69hnHyfZGq3Pfmyk6 dPNMaycadDvWU6zLXRtpVJ6/Gz16lK8+cbzu60g/KChVTVHJ+Ge+4eB3XcJQq9PEJv8s bAfYgtoMNQQEIXFTZC+jQxON4X/mLRfZIYkCmxR+TyF2scg+jYKnOTfNJLONcFhZ2zzn vyumJ3JGYXzJLjmTJniI/cmnoE+4vuIaojgPa5rw4KyhU+6I8mCAd/134rEIAQa9+9fa gSRpkdf6RvtBUaM/1Stj6INIo0NkOQYT3iqa5tqbTmUPmBjVOZcJDSAKheBJ0Q+ZnYMP m+tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766677168; x=1767281968; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=aO01A88yrKcP9IM3Oszq4SEtivGE+/01ZSZRbOyohwo=; b=nmbfGC2TxCIJ3F1j65l/IBPLq+b8MEDDSjJuYWqXfqBWyQPpMgIucL0bIIXc3iIZaM Bk0RbPyVTaZVgXqARgW3cad+BDla1LcComtVZqW3wSkF+n9T8sAMbbr01xuTyxaaKPPS mRqWiyfA9L+ge3WEwC6uBIu3O+VVqK3TOZfJI0ygQxRclSW3XEqAfxJP8IHpnxmyTUA/ X6wF7lUWqwQPqpi59DUo4V85BmG/wJJffb9ug1jxEJTCWzn7xnupQ6hEdpww/gkb3LYf 9W5399RVtN/GEe5cIFEsa0VOv6bWiBTj0d8lZxbnpN/A1tA6eAHzIp3lUslekaLpkSI3 U3kg== X-Forwarded-Encrypted: i=1; AJvYcCXVqTgfSJaYJoJuFEYe00PwAUnFdZeWGQvrnZAMGw8vgIa0JvF1+NsOlf8NH2QD9oaPAhX1+zBaLGSzw8i2@lists.postgresql.org X-Gm-Message-State: AOJu0YwypZPNIzplzIl+O6L3jBxzEdbCPesNgHxD6UkGIyVFbQalDAxm Sf+uWJj/sYihshfiBTcJlwE/Lb1j2VjKsbgsd7Z1RFc+SpDouLoqcJOr/L+cG+nCYg== X-Gm-Gg: AY/fxX5Kxik/IQFOwIFheGC2DPDekBS6iHVvxDpso0Cf8NrTcoWNWZJLI7CdU2+ndnh k5Wztpc3cS4ppb7oqXuuJiFHvZl2KOpati8H7xdA4qQRgWtjZRoCSDZN61a234Qg/NkBxXqAXOb cjGcSbAYZcST6+Gve5eflZDq4vVEGm2XF139ufzlHIBVL9u352g4WbEKMOGyK8/O0hbDSchI7YZ gIismK3fqS3N/R6avCg3rT0omilY8aZJCQzEKG8vZFl/t4pQZnunlTi4gJIBpd3AclzaEksYHVw Kp484ginWD3MMvRDzh9DI4eo2uUSgK5gvbk5jjb1y+dLpCTq+bxe8IXEq5oZlvvjAjmoYW2wLEr /Bjyx8CZm2urF9r79wP7n1dwXcMOtT70xRIrvfT2XdYcDf7tOjmIAfgvol9yXsbZ0PC8VHtevO7 s9kVEAYhPBQATVW+qbDpBw X-Google-Smtp-Source: AGHT+IFU8UYZiY1+f9X1FEIZXAZEPlcV9A35JN4P0DxKjFSC9nSCybCL1/Cgov0l46y2Gvwk1RqfTA== X-Received: by 2002:a17:906:9b4d:b0:b72:5629:1789 with SMTP id a640c23a62f3a-b8020442500mr1929829666b.13.1766677167104; Thu, 25 Dec 2025 07:39:27 -0800 (PST) Received: from [10.248.37.148] ([130.41.208.2]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8037a60500sm2081873766b.13.2025.12.25.07.39.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Dec 2025 07:39:26 -0800 (PST) Content-Type: multipart/mixed; boundary="------------JHSn3OcJk0xd88aZ3IZYOS1u" Message-ID: <8f123089-49ed-4c35-ab28-e3df70d28043@garret.ru> Date: Thu, 25 Dec 2025 17:39:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: index prefetching To: Peter Geoghegan , Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Dilip Kumar References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> Content-Language: en-US From: Konstantin Knizhnik In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------JHSn3OcJk0xd88aZ3IZYOS1u Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 21/12/2025 7:55 PM, Peter Geoghegan wrote: > On Wed, Dec 10, 2025 at 9:21 PM Peter Geoghegan wrote: >> Attached is v4. > Attached is v5. Changes from v4: > > * Simplified and optimized index-only scans, with a particular > emphasis on avoiding regressions with nested loop joins with an inner > index-only scan. > > There were quite a number of small problems/dead code related to > index-only scans fixed by this new v5. Overall, I'm quite a bit > happier with the state of index-only scans, which I'd not paid too > much attention to before now. > > * Added Valgrind instrumentation to the hash index patch, which was > required to fix some false positives. > > The generic indexam_util_batch_unlock routine had Valgrind > instrumentation in earlier versions, just to keep nbtree's buffer > locking checks from generating similar false positives. Some time > later, when I added the hashgetbatch patch, there were new Valgrind > false positives during hash index scans -- which I missed at first. > This new v5 revisions adds similar Valgrind checks to hash itself > (changes that add code that is more or less a direct port of the stuff > added to nbtree by commit 4a70f829), which fixes the false positives, > and is independently useful. > > The rule for amgetbatch-based index AMs is that they must have similar > buffer locking instrumentation. That seems like a good thing. > > -- > Peter Geoghegan I the previous mail I shared results of my experiments with different prefetch distance. I think that we should start prefetching of heap tuples not from the second batch, but after some number of proceeded tids. Attached please find a patch which implements this approach. And below are updated results: limit\prefetch    on      off   always  inc    threshold 1                 12074   12765  3146    3282     12394 2                 5912    6198   2463    2438      6124 4                 2919    3047   1334    1964      2910 8                 1554    1496   1166    1409      1588 16                815     775    947     940        600 32                424     403    687     695        478 64                223     208    446     453        358 128               115     106    258     270        232 256               68      53     138     149        131 512               43      27     72      78          71 1024              28      13     38      40          38 Last column is result of prefetch with read_stream_threshold=10. --------------JHSn3OcJk0xd88aZ3IZYOS1u Content-Type: text/plain; charset=UTF-8; name="read_stream_threshold.patch" Content-Disposition: attachment; filename="read_stream_threshold.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGI5ZDQy YjE1YTE4Li5hYWM2NjNlZGZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHJv Z3Jlc3MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKQEAgLTQ2LDYgKzQ3LDggQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCitpbnQgcmVhZF9zdHJlYW1fdGhyZXNo b2xkID0gREVGQVVMVF9SRUFEX1NUUkVBTV9USFJFU0hPTEQ7CisKIHN0YXRpYyB2b2lkIHJl Zm9ybV9hbmRfcmV3cml0ZV90dXBsZShIZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCQkgUmVs YXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAkJCQkJCQkJCSBEYXR1bSAqdmFs dWVzLCBib29sICppc251bGwsIFJld3JpdGVTdGF0ZSByd3N0YXRlKTsKQEAgLTIyOSw2ICsy MzIsNyBAQCBoZWFwX2JhdGNoX2FkdmFuY2VfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbiwgc3Ry dWN0IEJhdGNoUXVldWVJdGVtUG9zICpwb3MsCiAJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKQogewogCUJhdGNoSW5kZXhTY2FuIGJhdGNoOworCWludCBwcm9jZWVkX2l0ZW1z OwogCiAJLyogbWFrZSBzdXJlIHdlIGhhdmUgYmF0Y2hpbmcgaW5pdGlhbGl6ZWQgYW5kIGNv bnNpc3RlbnQgKi8KIAliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKQEAgLTI4 OCw2ICsyOTIsMjQgQEAgaGVhcF9iYXRjaF9hZHZhbmNlX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4sIHN0cnVjdCBCYXRjaFF1ZXVlSXRlbVBvcyAqcG9zLAogCSAqLwogCWJhdGNoID0gSU5E RVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKIAorCXByb2NlZWRfaXRlbXMgPSBT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikKKwkJPyBwb3MtPml0ZW0gLSBiYXRj aC0+Zmlyc3RJdGVtCisJCTogYmF0Y2gtPmxhc3RJdGVtIC0gcG9zLT5pdGVtOworCisJLyog RGVsYXkgaW5pdGlhbGl6aW5nIHN0cmVhbSB1bnRpbCBwcm9jZWVkaW5nICovCisJaWYgKHBy b2NlZWRfaXRlbXMgPj0gcmVhZF9zdHJlYW1fdGhyZXNob2xkCisJCSYmICFzY2FuLT54c19o ZWFwZmV0Y2gtPnJzCisJCSYmICFzY2FuLT5iYXRjaHF1ZXVlLT5kaXNhYmxlZAorCQkmJiAh c2Nhbi0+eHNfd2FudF9pdHVwCS8qIFhYWCBwcmVmZXRjaGluZyBkaXNhYmxlZCBmb3IgSW9T LCBmb3Igbm93ICovCisJCSYmIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpCisJeworCQlz Y2FuLT54c19oZWFwZmV0Y2gtPnJzID0KKwkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9u KFJFQURfU1RSRUFNX0RFRkFVTFQsIE5VTEwsCisJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVs YXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbi0+ cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zdHJlYW0sCisJCQkJCQkJCQkgICBzY2FuLCAw KTsKKwl9CisKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQogCXsK IAkJaWYgKCsrcG9zLT5pdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSkKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggOGY2ZmE2ODQzY2IuLjBjMjA4 MWUzMmJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dApAQCAtMjMyMiw2ICsyMzIyLDE1IEBACiAgIG1heCA9PiAnREJMX01BWCcsCiB9LAogCit7 IG5hbWUgPT4gJ3JlYWRfc3RyZWFtX3RocmVzaG9sZCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRl eHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19DT1NUJywKKyAg c2hvcnRfZGVzYyA9PiAnTWluaW1hbCBudW1iZXIgb2YgaGVhcCB0dXBsZXMgZm9yIGNyZWF0 aW9uIHJlYWQgc3RyZWFtLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlh YmxlID0+ICdyZWFkX3N0cmVhbV90aHJlc2hvbGQnLAorICBib290X3ZhbCA9PiAnREVGQVVM VF9SRUFEX1NUUkVBTV9USFJFU0hPTEQnLAorICBtaW4gPT4gJzAnLAorICBtYXggPT4gJ0lO VF9NQVgnLAorfSwKKwogeyBuYW1lID0+ICdyZWNvdmVyeV9lbmRfY29tbWFuZCcsIHR5cGUg PT4gJ3N0cmluZycsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnV0FMX0FS Q0hJVkVfUkVDT1ZFUlknLAogICBzaG9ydF9kZXNjID0+ICdTZXRzIHRoZSBzaGVsbCBjb21t YW5kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIGF0IHRoZSBlbmQgb2YgcmVjb3Zlcnku JywKICAgdmFyaWFibGUgPT4gJ3JlY292ZXJ5RW5kQ29tbWFuZCcsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaAppbmRleCAwMGY0YzNkMDAxMS4uOTcxNTA0MzNjOTkgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBERUZBVUxUX0NQVV9PUEVSQVRPUl9D T1NUICAwLjAwMjUKICNkZWZpbmUgREVGQVVMVF9QQVJBTExFTF9UVVBMRV9DT1NUIDAuMQog I2RlZmluZSBERUZBVUxUX1BBUkFMTEVMX1NFVFVQX0NPU1QgIDEwMDAuMAorI2RlZmluZSBE RUZBVUxUX1JFQURfU1RSRUFNX1RIUkVTSE9MRAkxMAogCiAvKiBkZWZhdWx0cyBmb3Igbm9u LUNvc3QgcGFyYW1ldGVycyAqLwogI2RlZmluZSBERUZBVUxUX1JFQ1VSU0lWRV9XT1JLVEFC TEVfRkFDVE9SICAxMC4wCkBAIC03Miw2ICs3Myw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBi b29sIGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9wcmVzb3J0ZWRfYWdncmVnYXRlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2FzeW5jX2FwcGVuZDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29uc3RyYWlu dF9leGNsdXNpb247CitleHRlcm4gUEdETExJTVBPUlQgaW50IHJlYWRfc3RyZWFtX3RocmVz aG9sZDsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBs ZXNfZmV0Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCiAJCQkJCQkJCSAgZG91YmxlIGluZGV4 X3BhZ2VzLCBQbGFubmVySW5mbyAqcm9vdCk7Cg== --------------JHSn3OcJk0xd88aZ3IZYOS1u--