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 1vvtZS-008hgg-1l for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 08:51:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvtZR-0023hU-17 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 08:51:37 +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 1vvtZQ-0023hJ-2h for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 08:51:37 +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.98.2) (envelope-from ) id 1vvtZN-00000001XUW-22tm for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 08:51:36 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b8f97c626aaso306870866b.2 for ; Fri, 27 Feb 2026 00:51:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772182293; cv=none; d=google.com; s=arc-20240605; b=Y/D/x0ZYbodD1jKYOPJXCmF6kTCxUMPnY+Io/w/x0EhDn6UelsMoWr7LK0Y7oMxbIc 6A7cmlzz7AQ9EuxiJaMY7IwEQHQn6U3hHHL8/mWgzVrUcdn4KPeK95Og8FlPQ/BItrDj 9k5/C0Q7fA2n0EOz9PjoqvHxQ1h+PsuHCo6ar12FL7Rp7uPePYkjZMlxlj3RjU4KhIy5 oJo6VXmxcPOvPB5HqyqwzUr510U9Y7wN2YY71LQ6X3Xd9DoYGwzMQY/eNZc4bP2HXdhi lbZ7DFtogJBbU5t0/sUPzC5dd+LBPnTP8AH+TfJ6Y99vMl7DkWf+TlJXoo3vI2TmQ/lw BuLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=hSxrft2zwrcmFV9+NMRRzcX/AXEFTOtCvvQMwS0GCrs=; fh=bdK2nbtdhGaZKtWd3/Dr9ib/sN26LCwZD8IE2Ye8vRI=; b=GMgzedojzQXm8Efqslr6Lz8BDPYg3H/JxpYJ4aiOoo8iZcUWth8ikau0qij7TbZe1Q xUZ/EakVfPRmmfGj+LvtmsQE4kA6pLQt6IF5kyz1RhRdaI1UTSCjyXIIkoPps0Dd1Ai2 34ocxvHXfJ/3uMK1UueLBYC2yA4cJFCBhVv1uW0+qfRu+7Mtq4SY878wouqvaBpJCPsF zjKLIkvC3vsAi2W8yWTEMBfbX21YQPcLiMsYc28WRa0cmT7e58gtuBLWM93cG65xDDGK cFEXwO09rjOS2sBgcwVFM5QU1eaZsG79gLD8UxuVMKIxe6tlnCPCY1vQ3LLdHOqE6WhU /tOw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772182293; x=1772787093; darn=lists.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=hSxrft2zwrcmFV9+NMRRzcX/AXEFTOtCvvQMwS0GCrs=; b=Kkm4iPnFqgtO6VvROoI+Uwn21IILdVacnkp/8D19dDWri8cRPYrsxiWmMVazzWt2QY y0vR6eUS43hWzTCh2aY9N+fYZL8/oGy1XP9+oK1/hO5XOyhafMK+Ul+Qr5rb2yJkYLKn TyZ3QcTBHEnIBrH1pjw1NZahzGljlnCZOjCOaciFuLD/2MtBAS5MEljie2I+guNwGQ8H 8T7yBy42V6WqFlo1QT9rak6fHLmGDO7oWYJhx2hlgsAEcbK3fK52xhF/QlHRbPIaftvx ez43VzMUf+7Ehqg5CXqkINVUo4XBEeUOBzLvUiQQ704+ERE1RvzDMdeBOnjx3Ja0Gx8k whpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772182293; x=1772787093; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=hSxrft2zwrcmFV9+NMRRzcX/AXEFTOtCvvQMwS0GCrs=; b=u2pKuMG4v64rWoEREl2ujyQtFbgT84AZtuF9fzVAznPKr6dshfkjB6U8akTSt514ll Hyca0PPo/9M7fGY4dNOlWCfMH23/okst7NuHWG7p71oqRSM78yPCpmppGCNL1t2Qmb4U N9/Yp1/uvqLrrVKsRFkt9Gq13TsghjS7NfgT80Q+7tbedQ0FDBjzF0V9J6zFmhbvlzWi FP94ewTqeL+gt0chejGh9/yae+1NJz/MgIfvtXByRJZPllsqwIUVFJQDo5tAxUGp/PAx rj28kYxktGTrwLOxkI7xFwantHHDv3D3xDmwy9w9JL1ZvOnydrgb3NSDLy+reCZGgWpj 1yNw== X-Forwarded-Encrypted: i=1; AJvYcCWYwozSdtRUj8vRYLsSm1wj81uE6JramKxe+XO+EKeceEtw0falZl9B9I5Fj8MlD1ZpV0H38kYiEoF0C8WW@lists.postgresql.org X-Gm-Message-State: AOJu0YwFZMBFk+4Yw3a9sbFQfbajLa0hewTpRA9MCvn4+QVftzjSIlyX UeiUwjvdVovWNtmqVYS4CWFVVToS3HdHpraPCLLFLSof/Z+GgKjhSZb+eITJypeQX+VvMIT9g2j hiZwzPJzcEqczayfvaeBQ9HhsmNeAkoI= X-Gm-Gg: ATEYQzzszGdwSsid3YfOoFuCvjxtR7crJWpqTv9DPWf4PqMlD/bRhZtqXNm5WZhiHFn CDiryd3ZypOFXzkEldXtubW7byPmTa64J7pMnekoWHoJCYgF80jQZyA/nGvwm/Mxa8i4dg7Xnwe 939VOJcR5TxRBX7zStaZq/E+HgDkJKoQxBlJqC0iMZF1PMddQgXc70MtgkeCSBUZ5lUmnVxAnF/ gRRFeKmZej0CsRDrI1V92TrCjelF+26l683u6YKzXE751q4CuXibc1+JcelR/ozF+I96bbTFrjP V2xCXZqcN9nGBOoTaRlsSKc5VRuJ2afblrDiqzpePdcQ7N46UQ== X-Received: by 2002:a17:906:6d59:b0:b8f:8e99:7860 with SMTP id a640c23a62f3a-b9376549281mr74792866b.46.1772182292271; Fri, 27 Feb 2026 00:51:32 -0800 (PST) MIME-Version: 1.0 References: <64a2re223ajj4popowsyu4xekbuvvyfwkrihn5yzyrkwsmsuvp@2lls3tpww5dl> <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Alexandre Felipe Date: Fri, 27 Feb 2026 08:51:19 +0000 X-Gm-Features: AaiRm52EPTYBwAuilr56zx77glI4XIpQSkBIPQ5fzYX0twrIR2ZIOXJk4wUryIA Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Peter Geoghegan , Tomas Vondra , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000002570e064bca580e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000002570e064bca580e Content-Type: multipart/alternative; boundary="00000000000002570d064bca580c" --00000000000002570d064bca580c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 27, 2026 at 4:18=E2=80=AFAM Andres Freund = wrote: > Hi, > > I'm planning to do some reviewing in the next days. In preparation I just > retried a benchmark and saw some odd results. After a while I was able t= o > reproduce even with a simpler setup: > > I'm planning to do some reviewing in the next days. In preparation I just > retried a benchmark and saw some odd results. Since we are talking about results I will share mine too :) The bottomline is: Prefetch is working, but it might make some things slower. It is obvious that this should better exploit IO for one single heavy query, in one single table. It is not so obvious, to me, how this would behave when there are multiple concurrent queries. It is not so obvious how this will impact when multiple tables are queried at the same time. My feeling is that it should greatly improve on a disk with a mechanical head, if it performs the same reads reducing the number of times it has to jump from one to another. Is there much interest in special optimisations for those or is the focus more on SSDs? On my previous review I wasted way to much time trying to improve read_stream, to end up getting just some mixed results. This time I tried to step back and try to look at various functions that could have changed. Initially I tried compiler function instrumentation, but then the profiling overhead of 33k functions dominated. This time what I did (1) added a indexscan_prefetch_distance, maybe a bette= r name would be just prefetch_distance, it limits the growth of distance in read_stream (distance-limit.diff). (2) captured execution statistics for 15 functions (profiling-instrumentation.diff). At exit each process will create a log with its configuration and call statistics. The benchmark was with full index scan on a sequential column, executed repeatedly and no cache eviction: buffer hit path. BENCHMARK RESULTS MacOS in normal (for me) use Prefetch Avg Time Min Time Max Time ------------------------------------------------ off 6.03s 5.12s 11.70s 1 59.44s 25.33s 257.60s 4 19.74s 12.66s 44.36s 16 11.87s 7.49s 19.13s 64 8.77s 6.05s 13.97s 128 6.40s 4.33s 11.74s MacOS idle, after reboot Prefetch Avg Time Min Time Max Time ------------------------------------------------ off 2.17s 2.12s 2.26s 1 5.53s 5.44s 5.57s 4 3.17s 3.04s 3.39s 16 3.13s 3.04s 3.29s 64 2.82s 2.66s 2.88s 128 2.83s 2.69s 2.90s Docker on MacOS, idle, after reboot Prefetch Avg Time Min Time Max Time ------------------------------------------------ off 1.38s 1.36s 1.46s 1 3.65s 3.56s 3.70s 4 2.00s 1.98s 2.09s 16 1.56s 1.53s 1.59s 64 1.29s 1.25s 1.33s 128 1.28s 1.26s 1.32s Docker on Linux Prefetch Avg Time Min Time Max Time ------------------------------------------------ off 6.07s 5.92s 6.29s 1 6.85s 6.67s 7.04s 4 6.26s 6.10s 6.41s 16 6.14s 5.95s 6.30s 64 5.74s 5.62s 5.91s 128 5.72s 5.63s 5.86s The linux execution presented very little degradation. On MacOS host the degradation was more noticeable than on MacOS docker running a debian, suggesting that software ecosystem contributes, docker on MacOS (arm), was slower than docker on a native linux (x86_64), here I could be it is CPU architecture or OS kernel differences. WHAT CHANGED The benchmark will produced, 195 autovac_worker, and 3293 backend and one bgworker log. For prefetch off the number of calls is constant. For prefetch on they vary widely, but I am looking at the total time per function, assuming that the differences in the number of calls changes only how the work was partitioned but the final work was the same. With Docker version 28.3.0, build 38b7060, Python 3.10.18 $ docker compose up --build benchmark $ docker cp docker-postgres-1:/tmp/profiling ./docker-profiling $ python compare_profiles.py docker-profiling Function off,d=3D0 on,d=3D128 Diff % z-statisti= c ------------------------------------------------------------------------ read_stream_next_buffer 0.0 3944.9 +3944.9 NEW% +654.88 read_stream_look_ahead 0.0 2999.3 +2999.3 NEW% +624.00 WaitReadBuffers 98.3 754.6 +656.3 +667.7% +414.56 _bt_next 748.7 1072.8 +324.1 +43.3% +20.35 heapam_batch_getnext 788.4 1114.6 +326.2 +41.4% +20.18 btgetbatch 777.0 1096.7 +319.7 +41.2% +20.14 IndexNext 17031.7 10400.3 -6631.5 -38.9% -249.51 _bt_first 17.2 13.0 -4.2 -24.6% 10.56 Function off,d=3D0 on,d=3D1 Diff % z-statisti= c ------------------------------------------------------------------------ read_stream_look_ahead 0.0 28135.9 +28135.9 NEW N/A read_stream_next_buffer 0.0 199245.7 +199245.7 NEW N/A IndexNext 17031.7 211861.0 +194829.2 12.4x +283.00 WaitReadBuffers 98.3 169641.9 +169543.6 1724x +275.63 heapam_index_fetch_tuple 13564.5 205828.2 +192263.7 15x +172.56 heapam_batch_getnext 788.4 1944.0 +1155.6 +146.6% +25.39 _bt_next 748.7 1833.9 +1085.2 +144.9% +24.85 btgetbatch 777.0 1881.2 +1104.2 +142.1% +24.74 _bt_first 17.2 19.3 +2.1 +12.0% +10.33 PS.: The docker environment cache eviction requires adjustments. --00000000000002570d064bca580c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Fri, Feb 27,= 2026 at 4:18=E2=80=AFAM Andres Freund <andres@anarazel.de> wrote:
Hi,

I'm planning to do some reviewing in the next days. In preparation I ju= st
retried a benchmark and saw some odd results.=C2=A0 After a while I was abl= e to
reproduce even with a simpler setup:


> I'm planning to do some reviewing= in the next days. In preparation I just

> retried a benchmark and s= aw some odd results.


Since we are talking abou= t results I will share mine too :)


The bottoml= ine is: Prefetch is working, but it might make some things slower.


It is obvious that this should better exploit IO for o= ne single heavy query, in=C2=A0=

one single table.

It is not so obvious, to me, how this wou= ld behave when there are multiple=C2=A0

concurrent queries. It is not so obvious how this will = impact when multiple=C2=A0

tables are queried at the same time. My feeling is that it should gr= eatly=C2=A0

improve = on a disk with a mechanical head, if it performs the same reads=C2=A0

reducing the number of t= imes it has to jump from one to another. Is there much=C2=A0

interest in special optimisations= for those or is the focus more on SSDs?


On my= previous review I wasted way to much time trying to improve read_stream,=C2=A0

to end up gett= ing just some mixed results. This time I tried to step back and=C2=A0

try to look at various f= unctions that could have changed. Initially I tried=C2=A0

compiler function instrumentation, bu= t then the profiling overhead of 33k=C2=A0

functions dominated.


=

Th= is time what I did (1) added a indexscan_prefetch_distance, maybe a better<= span class=3D"gmail-Apple-converted-space">=C2=A0

name would be = just prefetch_distance, it limits the growth of distance in=C2=A0

read_stream (distance-limit= .diff). (2) captured execution statistics for 15=C2=A0

functions (profiling-instrumentation.dif= f). At exit each process will create a=C2=A0

log with its configuration and call statistics.


The benchmark was with full index scan on a sequ= ential column, executed=C2=A0

repeatedly and no cache eviction: buffer hit path.


BENCHMARK RESULTS


MacOS in norm= al (for me) use

Prefetch=C2=A0=C2=A0 =C2=A0=C2=A0Avg Time=C2=A0=C2=A0 =C2=A0=C2=A0Min Time=C2=A0=C2=A0 =C2=A0=C2=A0Max Time=C2=A0=C2=A0 =C2=A0

--------------------= ----------------------------

off=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.03s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.= 12s=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A011.70s

=C2=A0= =C2=A01=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0=C2=A059.44s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A025.33s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A0257.60s

=C2=A0=C2=A04=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0= 19.74s=C2=A0=C2=A0 =C2=A0 =C2= =A0=C2=A012.66s=C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A044.36s

=C2=A016=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A011.87s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A07.49s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A019= .13s

=C2=A064=C2=A0<= span class=3D"gmail-Apple-converted-space">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A08.77s=C2=A0 =C2= =A0 =C2=A0 =C2=A0=C2=A06.05s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A013.97s

128=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.40s=C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A04.33s=C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A011.74s


=

MacOS = idle, after reboot

Prefetch=C2=A0=C2=A0 =C2=A0=C2=A0Avg Time=C2=A0=C2=A0 =C2=A0=C2=A0Min Time=C2=A0=C2=A0 =C2=A0=C2=A0Max Time=C2=A0=C2=A0 =C2=A0

-----------------= -------------------------------

off=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.17s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0= 2.12s=C2=A0=C2=A0 =C2=A0 =C2=A0= =C2=A0=C2=A02.26s

= =C2=A0=C2=A01=C2=A0=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.53s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.44s=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.57s

=C2=A0=C2=A04=C2=A0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A03.17s= =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A03.04s=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A03.39s

=C2=A016=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A03.13s=C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A03.04s=C2=A0=C2= =A0 =C2=A0 =C2=A0 =C2=A0=C2=A03.29s

=C2=A064=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.82s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.66s= =C2=A0=C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A02.88s

128=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.83s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.69s=C2= =A0=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A02.90s


Docker on MacOS, idle, afte= r reboot

Prefetch=C2=A0=C2= =A0 =C2=A0=C2=A0Avg Time=C2=A0=C2=A0 =C2=A0=C2=A0Min Time=C2=A0=C2=A0 =C2=A0=C2=A0Max Time=C2=A0=C2=A0 =C2=A0

--------------------------= ----------------------

off= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A01.38s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.36s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.= 46s

=C2=A0=C2=A01=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A03.65s=C2=A0=C2=A0 = =C2=A0 =C2=A0=C2=A03.56s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A03.70s

=C2=A0=C2=A04=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A02.00s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.98s=C2= =A0=C2=A0 =C2=A0 =C2=A0=C2=A02.09s

=C2=A016<= span class=3D"gmail-Apple-converted-space">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A01.56s=C2=A0=C2= =A0 =C2=A0 =C2=A0=C2=A01.53s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.59s

=C2=A064=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A01.29s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.25s=C2= =A0=C2=A0 =C2=A0 =C2=A0=C2=A01.33s

128=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0=C2=A01.28s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.26s=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A01.32s


Docker on Linux

Prefetch=C2=A0=C2=A0 =C2=A0=C2=A0Avg Time=C2=A0=C2=A0 =C2=A0=C2=A0Min Time=C2=A0<= span class=3D"gmail-Apple-converted-space">=C2=A0 =C2=A0=C2=A0Max Ti= me=C2=A0=C2=A0 =C2=A0

<= span class=3D"gmail-s1" style=3D"font-variant-ligatures:no-common-ligatures= ">------------------------------------------------

off=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.07s=C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A05.92s=C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A06.29s

=C2=A0=C2=A01=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.85s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.67s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0= 7.04s

=C2=A0=C2=A04=C2=A0=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0=C2=A06.26s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.10s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06.41s

<= p class=3D"gmail-p1" style=3D"font-variant-numeric:normal;font-variant-east= -asian:normal;font-variant-alternates:normal;font-size-adjust:none;font-ker= ning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;l= ine-height:normal;font-family:Menlo;margin:0px;color:rgb(0,0,0)">=C2=A016=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A06= .14s=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A05.95s=C2=A0 =C2=A0= =C2=A0 =C2=A0=C2=A06.30s

=C2=A064=C2=A0=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.74s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.62s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.= 91s

128=C2=A0=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A05.72s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.63s=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A05.86s


The linux execution presented very little degradation.= On MacOS host the=C2=A0=

degradation was more noticeable than on MacOS docker running a debian,= =C2=A0

suggesting th= at software ecosystem contributes, docker on MacOS (arm), was=C2=A0

slower than docker on a nat= ive linux (x86_64), here I could be it is CPU=C2=A0

architecture or OS kernel differences.



WHAT CHANGED


The benchmark will produced, 195 autovac_worker, and 3293 = backend and one=C2=A0

<= span class=3D"gmail-s1" style=3D"font-variant-ligatures:no-common-ligatures= ">bgworker log. For prefetch off the number of calls is constant. For prefe= tch on=C2=A0

<= p class=3D"gmail-p1" style=3D"font-variant-numeric:normal;font-variant-east= -asian:normal;font-variant-alternates:normal;font-size-adjust:none;font-ker= ning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;l= ine-height:normal;font-family:Menlo;margin:0px;color:rgb(0,0,0)">they va= ry widely, but I am looking at the total time per function, assuming=C2=A0

that the differences= in the number of calls changes only how the work was=C2=A0

partitioned but the final work wa= s the same.


Wi= th Docker version 28.3.0, build 38b7060,=C2=A0Python 3.10.18


= $ docker compose up --build benchmark

$ docker cp docker-postgres-1:/tmp/profiling ./docker-profiling=

$ python compare_profiles.py docker-profiling


Function=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0off,d=3D0 on,d=3D= 128=C2=A0=C2=A0 =C2=A0=C2=A0Diff=C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0% z-statistic

--------------------------------------= ----------------------------------

read_stream_next_buffer=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A00.0= =C2=A0=C2=A0=C2=A03944.9= =C2=A0=C2=A0+3944.9=C2= =A0=C2=A0 =C2=A0=C2=A0NE= W%=C2=A0=C2=A0+654.88

<= span class=3D"gmail-s1" style=3D"font-variant-ligatures:no-common-ligatures= ">read_stream_look_ahead=C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A00.0=C2=A0=C2=A0=C2=A02999.3=C2=A0=C2=A0+2999.3=C2=A0=C2=A0 =C2=A0=C2=A0NEW%=C2=A0=C2=A0+624.00

WaitReadBuffers=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0<= /span>98.3=C2=A0 =C2=A0=C2=A0754.6=C2=A0=C2=A0=C2=A0+656.3=C2=A0=C2=A0+6= 67.7%=C2=A0=C2=A0+414.56=

_bt_next=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0748.7=C2= =A0=C2=A0=C2=A01072.8=C2= =A0=C2=A0=C2=A0+324.1=C2= =A0=C2=A0=C2=A0+43.3%=C2= =A0=C2=A0=C2=A0+20.35

<= span class=3D"gmail-s1" style=3D"font-variant-ligatures:no-common-ligatures= ">heapam_batch_getnext=C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A0788.4=C2=A0=C2=A0=C2=A01114.6=C2=A0=C2=A0=C2=A0+326.2=C2=A0=C2=A0=C2=A0+41.4%=C2=A0=C2=A0=C2=A0+20.18

btgetbatch=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=C2=A0777.0=C2=A0=C2=A0=C2=A01096.7=C2=A0=C2=A0=C2=A0+319.7=C2=A0=C2=A0=C2=A0+41.2%=C2=A0=C2=A0=C2=A0+20.14

IndexNext=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2= =A017031.7=C2=A0=C2=A010400.3=C2=A0=C2=A0= -6631.5=C2=A0=C2=A0=C2=A0-38.9%=C2=A0=C2=A0-249.= 51

_bt_first=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A017.2=C2= =A0=C2=A0 =C2=A0=C2=A013= .0=C2=A0=C2=A0 =C2=A0=C2=A0-4.2=C2=A0=C2=A0=C2=A0-24.6%=C2=A0 =C2=A0=C2=A010.56


Function=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A0off,d=3D0=C2=A0= =C2=A0=C2=A0on,d=3D1=C2=A0=C2=A0 =C2=A0=C2=A0Diff=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0% z-statistic

--------------= ----------------------------------------------------------

read_stream_= look_ahead=C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A00.0=C2=A0=C2= =A028135.9 +28135.9=C2= =A0 =C2=A0 =C2=A0=C2=A0NEW=C2=A0 =C2=A0=C2=A0N/A

read_stream_next_buffer=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A00.0 1992= 45.7 +199245.7=C2=A0=C2=A0 =C2= =A0=C2=A0NEW=C2=A0 =C2= =A0=C2=A0N/A

IndexNext=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A017031.7 211861.0 +194829.2=C2=A0=C2=A0=C2=A012.4x=C2= =A0=C2=A0+283.00

WaitReadBuffers=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A098= .3 169641.9 +169543.6=C2=A0=C2= =A0=C2=A01724x=C2=A0=C2= =A0+275.63

heapam_index_fetch_tuple=C2=A0=C2=A013564.5 205828.2 +192263.7=C2=A0=C2=A0 =C2=A0=C2=A015x=C2=A0=C2=A0+172.56

heapam_batc= h_getnext=C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0788.4=C2=A0= =C2=A0=C2=A01944.0=C2=A0= =C2=A0+1155.6=C2=A0=C2= =A0+146.6%=C2=A0=C2=A0= =C2=A0+25.39

_bt_next=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2= =A0748.7=C2=A0=C2=A0=C2= =A01833.9=C2=A0=C2=A0+1085.2=C2=A0=C2=A0+= 144.9%=C2=A0=C2=A0=C2=A0= +24.85

btgetbatch=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0777.0=C2= =A0=C2=A0=C2=A01881.2=C2=A0=C2=A0+1104.2=C2=A0=C2=A0+142.1%=C2=A0=C2=A0=C2=A0+24.74

_bt_first=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A017.2=C2=A0= =C2= =A0 =C2=A0=C2=A019.3=C2=A0=C2=A0 =C2=A0=C2=A0+2.1=C2=A0<= /span>=C2=A0=C2=A0+12.0%=C2=A0=C2=A0=C2=A0+10.33

PS.:=C2=A0The= docker environment cache eviction requires adjustments.
<= br>

--00000000000002570d064bca580c-- --00000000000002570e064bca580e Content-Type: application/zip; name="v11-docker-instrumentation.zip" Content-Disposition: attachment; filename="v11-docker-instrumentation.zip" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm4n8g640 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 UEsFBgAAAAAHAAcAaAIAACNpAAAAAA== --00000000000002570e064bca580e--