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 1wHcDt-007M0A-11 for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Apr 2026 06:47: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 1wHcDs-00GXXB-0e for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Apr 2026 06:47:08 +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 1wHcDr-00GXX3-2I for pgsql-hackers@lists.postgresql.org; Tue, 28 Apr 2026 06:47:07 +0000 Received: from mail-dy1-x1342.google.com ([2607:f8b0:4864:20::1342]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHcDp-000000039LC-0qBT for pgsql-hackers@lists.postgresql.org; Tue, 28 Apr 2026 06:47:06 +0000 Received: by mail-dy1-x1342.google.com with SMTP id 5a478bee46e88-2c15849aa2cso14737940eec.0 for ; Mon, 27 Apr 2026 23:47:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777358824; cv=none; d=google.com; s=arc-20240605; b=O+mbgFn5IgX9d7u6angplbb5fKhFnt9kCELQDQLIBTuBJmYLzu9Ray1HiQWjdu9Lzg zn/+GDVyzwUfTMbqNyf68j/Jp0M1/r6MvVReSerH9mmx9y1n2ObJR8F6/dglO3UMMtPz u/wK47zHPALj+lN3VIY6ewpL0KvpWq8fkPGGAhbgLQbjMVVLDPGiYhyyZqYjTm+hzrRd aOoYtMbKZl+BwXu12xb6bDaKSSJHvifkHpI60X2aesZ3V3Eh5VFD+vvu2pqhPaoOwu+p 0x5CwBl0ONGam0paITl3Y7zBvKrbeKpXyuomE3xH6F2LDtOCnyqGZOq8e/pH0AsFAG3u grUw== 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:mime-version:dkim-signature; bh=fWEF/2EhLEgGJr8EKCc7wKGLb/Pbz7LB/QUH9uFDtvQ=; fh=f3surhp/k9AB0OdarxzoHSrN9HvsVaKWgw4kJ+63WGU=; b=KKOlnJoB6wLoe6LbtzxpXscC3Wj/a4ZTTMa3140vb2McMPbE/02nKAuH3DXOEMNuCh VTBaZ8H0zjInsJIWlItru/o8S2ke0FKyKBtWCQM6+mT9sVF4sqj9QAY0zujUe+PAThI5 /goURVDQbhc1PPoxW06M+lCQAjWllCWIIPXh5R+KkcH95wmuwgIqqJR62XghcfwPUUw9 iXihRucPs2IwWHX/5F12yBJSd9mwtZOwouzU6+G4/6NN9XHr96C9iSibff9cpthvFAxz DQjuBaVpYel+fzKrHaHca4AVUEzMXiQIVAE941SF/H6iXKGg+GwGPJ3zq1EI4z8ZrRjr SkXQ==; 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=20251104; t=1777358824; x=1777963624; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=fWEF/2EhLEgGJr8EKCc7wKGLb/Pbz7LB/QUH9uFDtvQ=; b=Z2zOqDIfkF+nf8HcT/iNTqN43my0FatlbfTYCvPJ4qbve8Ir29IuEMfSQUDc08/MbC qGQ5NB+XHU8SEAjxSgsi2nFAYDcs0IM5RLDQtacG0S7dGzgvsVlTEN8hW0d07mAuxSTh /RUoJUEz0Ko2Tc8+u/ttcXwI7daC7ET91kdJJG+qqVsSU820cGxDKFQyElepPHePgm9B DIY5XvHUBtmYgH0YR4njv63Q9bRUQCLPb2+OrqVVuLZVHYQd/1xH8rGL//Wr6yRXfOxV SBiuUMsYiXVBYhTzDajAYM376t8HjSlthrN3vagsNWG2zhzidkBCrTVs+PyTwu4K77Iw fbDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777358824; x=1777963624; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fWEF/2EhLEgGJr8EKCc7wKGLb/Pbz7LB/QUH9uFDtvQ=; b=azviBbg76S/p6WLThyFyopZyx37hEs/kzMqGSNWjBUwjGVDIS3/jLpUanDwKu4LF9m 3daWFWcCmX8umA4vahjqlfZTuE+LnJQTXSb6kzJcLDj7YgOLX4iVmGHNGTeCr3LafL7F L2Do+68bRtPIzCyMnPE3D28h94LR1VrLtTTmiLeE4JTIVF5rmRfQnqiw8wRsyuAyP+xz UyhPRLBOOvORB5SVutA72TvbSAy+4/xun5/bdeevwCedRKQdOsd3sOD6h50qj+7s9Dhl pV0EmR8OeQu8G302exIPQb63gGI/ysIgfgwLnGl122Nd/86+dKR2IFpx3e+QwazM+lRX HUpA== X-Gm-Message-State: AOJu0YwHTA4kOpoEUJmV+LTQjcw6Rd9VkxOKZSfxvmhzy2DIPi5ms94R TfDPn0xSgnUiqK13WfhxVtDM8dJSiAcnhtTXEanyB9XVMoyIBvPMG9fPvgQ9IsrZ58kQ5sgLyK7 pssksb+KixboZeVBGFLjCcEMZm7mhWGkC7E6DWhk= X-Gm-Gg: AeBDies/gfzuPuI0+NzzmJAeYON0wPLDOarOCaGCZbkru6Y7k+2bFVrWkcVNv03So9U u3vi80Jua2fSmwLqWHV6/6a1GGIKlLbR0MuvsSWR7wnf0W7hJp6Aa8OM09QXxG1qDxMjuQUkXQg f9cCpVuPaYMyYbO6Nmt6L0Dgjyq88NZdzGXFxXGgcCDcJKaIhovQgQ/Enojw3NKANq9hVWCH/Z9 EPpmKo6EAJYk5tx06VZwFvTu6gKHmE3b6r/b56HvbnJ2uevvgxTbeZhXOM3wd5khkPEhiv15Hma uJKkYWzqfSdrW+AHtQ== X-Received: by 2002:a05:7300:f18f:b0:2ea:4228:ab11 with SMTP id 5a478bee46e88-2ed09fde4cbmr830252eec.3.1777358824232; Mon, 27 Apr 2026 23:47:04 -0700 (PDT) MIME-Version: 1.0 From: lakshmi Date: Tue, 28 Apr 2026 12:21:14 +0530 X-Gm-Features: AVHnY4II_xSow7M6YMIw4wCi0hpTHvei2dDHmSTICaG9R-g6nqTi0yo3fnDHrhE Message-ID: Subject: [PATCH] Improve HASH overflow page reuse for better locality To: PostgreSQL Hackers Cc: Kirill Reshke , Robert Haas Content-Type: multipart/mixed; boundary="0000000000005bfb2b06507f99b4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005bfb2b06507f99b4 Content-Type: multipart/alternative; boundary="0000000000005bfb2a06507f99b2" --0000000000005bfb2a06507f99b2 Content-Type: text/plain; charset="UTF-8" Hi all, Based on the suggestion in the previous discussion [1], I am starting a separate thread to propose this as an enhancement. While testing the HASH index build improvements, I worked on a follow-up change to improve overflow page reuse. Currently, any free overflow page may be reused, which can scatter overflow chains and affect cache locality. This patch introduces a simple improvement where recently freed overflow pages are preferred during allocation. The change is backend-local and affects only page allocation. It does not introduce any WAL changes or modify the on-disk format. I have verified correctness using index build, drop, and VACUUM cycles. Initial checks also confirm that WAL behavior remains unchanged. I am currently working on collecting detailed performance results, including both favorable and unfavorable scenarios, and will share them shortly in this thread. The patch is attached for review. Feedback and suggestions are welcome. Regards, Lakshmi G reference [1] https://www.postgresql.org/message-id/flat/CALdSSPgu6fnoOYzgiFF4_Etr96zEHvSwvYJDemc3o%2B%2BEZbUQMA%40mail.gmail.com --0000000000005bfb2a06507f99b2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hi all,

Based on the suggestion in the previous discussion [1], = I am starting a separate thread to propose this as an enhancement.

While testing the HASH index build improvements= , I worked on a follow-up change to improve overflow page reuse. Currently,= any free overflow page may be reused, which can scatter overflow chains an= d affect cache locality. This patch introduces a simple improvement where r= ecently freed overflow pages are preferred during allocation.

The change is backend-local and affects only page = allocation. It does not introduce any WAL changes or modify the on-disk for= mat.

I have verified correctness using = index build, drop, and VACUUM cycles. Initial checks also confirm that WAL = behavior remains unchanged.

I am curren= tly working on collecting detailed performance results, including both favo= rable and unfavorable scenarios, and will share them shortly in this thread= .

The patch is attached for review. Fee= dback and suggestions are welcome.

Regards,
Lakshmi G

refere= nce

[1]=C2=A0htt= ps://www.postgresql.org/message-id/flat/CALdSSPgu6fnoOYzgiFF4_Etr96zEHvSwvY= JDemc3o%2B%2BEZbUQMA%40mail.gmail.com

--0000000000005bfb2a06507f99b2-- --0000000000005bfb2b06507f99b4 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-hash-reuse-recently-freed-overflow-pages.patch" Content-Disposition: attachment; filename="0001-hash-reuse-recently-freed-overflow-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moi9jeuc0 RnJvbSAzNGQ0ZDk5YmFhNTM3N2E0ZGFiYjhjZjljNGJjZDBlOWJiMmM2Mzc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYWtzaG1pIDxiaGFyYXRkYnBnQGdtYWlsLmNvbT4KRGF0ZTog TW9uLCA1IEphbiAyMDI2IDEwOjM4OjIzICswNTMwClN1YmplY3Q6IFtQQVRDSF0gaGFzaDogcmV1 c2UgcmVjZW50bHkgZnJlZWQgb3ZlcmZsb3cgcGFnZXMKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaG92ZmwuYyB8IDc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBm aWxlIGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92Zmwu YwppbmRleCAzMjc3ZGExOTg0MC4uYzY2ZjhhZGMwNTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aG92ZmwuYwpAQCAtMjIsNiArMjIsNjMgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBCYWNrZW5kLWxvY2FsIHJldXNlIGNhY2hlIGZvciByZWNlbnRseSBm cmVlZCBvdmVyZmxvdyBwYWdlcy4KKyAqIEJlc3QtZWZmb3J0IGhpbnQgb25seTogbm8gY29ycmVj dG5lc3Mgb3IgV0FMIGRlcGVuZGVuY3kuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmlu ZSBIQVNIX09WRkxfUkVVU0VfQ0FDSEVfU0laRSAzMgorCit0eXBlZGVmIHN0cnVjdCBIYXNoT3Zm bFJldXNlQ2FjaGUKK3sKKwlCbG9ja051bWJlciBibG9ja3NbSEFTSF9PVkZMX1JFVVNFX0NBQ0hF X1NJWkVdOworCWludAkJCWhlYWQ7CisJaW50CQkJY291bnQ7Cit9CQkJSGFzaE92ZmxSZXVzZUNh Y2hlOworCitzdGF0aWMgSGFzaE92ZmxSZXVzZUNhY2hlIG92ZmxfcmV1c2VfY2FjaGU7CisKKy8q IFJlY29yZCBhIGZyZWVkIG92ZXJmbG93IHBhZ2UgKi8KK3N0YXRpYyB2b2lkCitoYXNoX3JlY29y ZF9mcmVlZF9vdmZscGFnZShCbG9ja051bWJlciBibGtubykKK3sKKwlvdmZsX3JldXNlX2NhY2hl LmJsb2Nrc1tvdmZsX3JldXNlX2NhY2hlLmhlYWRdID0gYmxrbm87CisJb3ZmbF9yZXVzZV9jYWNo ZS5oZWFkID0KKwkJKG92ZmxfcmV1c2VfY2FjaGUuaGVhZCArIDEpICUgSEFTSF9PVkZMX1JFVVNF X0NBQ0hFX1NJWkU7CisKKwlpZiAob3ZmbF9yZXVzZV9jYWNoZS5jb3VudCA8IEhBU0hfT1ZGTF9S RVVTRV9DQUNIRV9TSVpFKQorCQlvdmZsX3JldXNlX2NhY2hlLmNvdW50Kys7Cit9CisKKy8qIFRy eSB0byByZXVzZSBhIHJlY2VudGx5IGZyZWVkIG92ZXJmbG93IHBhZ2UgKi8KK3N0YXRpYyBib29s CitoYXNoX3RyeV9yZXVzZV9jYWNoZWRfb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0 YWJ1ZiwKKwkJCQkJCQkgICBCbG9ja051bWJlciAqcmV1c2VfYmxrbm8pCit7CisJSGFzaE1ldGFQ YWdlIG1ldGFwID0gSGFzaFBhZ2VHZXRNZXRhKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZikpOworCWlu dAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3ZmbF9yZXVzZV9jYWNoZS5jb3VudDsgaSsrKQor CXsKKwkJaW50CQkJaWR4ID0KKwkJCShvdmZsX3JldXNlX2NhY2hlLmhlYWQgLSAxIC0gaSArIEhB U0hfT1ZGTF9SRVVTRV9DQUNIRV9TSVpFKQorCQkJJSBIQVNIX09WRkxfUkVVU0VfQ0FDSEVfU0la RTsKKworCQlCbG9ja051bWJlciBibGtubyA9IG92ZmxfcmV1c2VfY2FjaGUuYmxvY2tzW2lkeF07 CisJCXVpbnQzMgkJYml0bm8gPSBfaGFzaF9vdmZsYmxrbm9fdG9fYml0bm8obWV0YXAsIGJsa25v KTsKKworCQkvKiBCaXRtYXAgaXMgYXV0aG9yaXRhdGl2ZSAqLworCQlpZiAoX2hhc2hfaXNiaXRz ZXQobWV0YXAtPmhhc2htX21hcHAsIGJpdG5vKSkKKwkJeworCQkJX2hhc2hfY2xyYml0KG1ldGFw LT5oYXNobV9tYXBwLCBiaXRubyk7CisJCQkqcmV1c2VfYmxrbm8gPSBibGtubzsKKwkJCXJldHVy biB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiAKIAogc3RhdGljIHVpbnQz MiBfaGFzaF9maXJzdGZyZWViaXQodWludDMyIG1hcCk7CkBAIC0xMzIsNiArMTg5LDEwIEBAIF9o YXNoX2FkZG92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBidWYs IGJvb2wgcmV0YWluX3BpbiwgYm9vCiAJdWludDMyCQlpLAogCQkJCWo7CiAJYm9vbAkJcGFnZV9m b3VuZCA9IGZhbHNlOworCUJsb2NrTnVtYmVyIHJldXNlX2Jsa25vOworCisKKwogCiAJLyoKIAkg KiBXcml0ZS1sb2NrIHRoZSB0YWlsIHBhZ2UuICBIZXJlLCB3ZSBuZWVkIHRvIG1haW50YWluIGxv Y2tpbmcgb3JkZXIgc3VjaApAQCAtMTg2LDYgKzI0NywxNiBAQCBfaGFzaF9hZGRvdmZscGFnZShS ZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVmLCBib29sIHJldGFpbl9waW4s IGJvbwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIG1ldGFidWYsIExIX01FVEFfUEFHRSk7CiAJbWV0 YXAgPSBIYXNoUGFnZUdldE1ldGEoQnVmZmVyR2V0UGFnZShtZXRhYnVmKSk7CiAKKwkvKgorCSAq IE5FVzogVHJ5IHJldXNlIGNhY2hlIGJlZm9yZSBzY2FubmluZyBiaXRtYXAKKwkgKi8KKwlpZiAo aGFzaF90cnlfcmV1c2VfY2FjaGVkX292ZmxwYWdlKHJlbCwgbWV0YWJ1ZiwgJnJldXNlX2Jsa25v KSkKKwl7CisJCW92ZmxidWYgPSBfaGFzaF9nZXRpbml0YnVmKHJlbCwgcmV1c2VfYmxrbm8pOwor CQlwYWdlX2ZvdW5kID0gdHJ1ZTsKKwkJZ290byBmb3VuZDsKKwl9CisKIAkvKiBzdGFydCBzZWFy Y2ggYXQgaGFzaG1fZmlyc3RmcmVlICovCiAJb3JpZ19maXJzdGZyZWUgPSBtZXRhcC0+aGFzaG1f Zmlyc3RmcmVlOwogCWZpcnN0X3BhZ2UgPSBvcmlnX2ZpcnN0ZnJlZSA+PiBCTVBHX1NISUZUKG1l dGFwKTsKQEAgLTYzMyw2ICs3MDQsMTIgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJl bCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJQ0xSQklUKGZyZWVwLCBiaXRt YXBiaXQpOwogCU1hcmtCdWZmZXJEaXJ0eShtYXBidWYpOwogCisJLyoKKwkgKiBORVc6IFJlbWVt YmVyIHRoaXMgb3ZlcmZsb3cgcGFnZSBmb3IgcmV1c2UKKwkgKi8KKworCWhhc2hfcmVjb3JkX2Zy ZWVkX292ZmxwYWdlKG92ZmxibGtubyk7CisKIAkvKiBpZiB0aGlzIGlzIG5vdyB0aGUgZmlyc3Qg ZnJlZSBwYWdlLCB1cGRhdGUgaGFzaG1fZmlyc3RmcmVlICovCiAJaWYgKG92ZmxiaXRubyA8IG1l dGFwLT5oYXNobV9maXJzdGZyZWUpCiAJewotLSAKMi4zOS41Cgo= --0000000000005bfb2b06507f99b4--