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 1vWIPd-00GgTZ-1G for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Dec 2025 18:07:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vWIPb-003Gvz-0s for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Dec 2025 18:07:40 +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 1vWIPa-003Gvq-2r for pgsql-hackers@lists.postgresql.org; Thu, 18 Dec 2025 18:07:39 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vWIPZ-001SFh-08 for pgsql-hackers@lists.postgresql.org; Thu, 18 Dec 2025 18:07:39 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2a0f3f74587so13060865ad.2 for ; Thu, 18 Dec 2025 10:07:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766081254; x=1766686054; 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=rIeDWGFhJrJYlDWJ9QwORoAYI48CnzPSjwnaNMzWGBs=; b=hewZ7rXxmshM02uCpxyre/hUxoUFQreyyCGbo22OWNsShMDxtj2JW9IqdQRg9+Wjwj gTHzGh7x+9MBqx3dclS+cJU0revDZmygW5R4D7gtwQ/Jb8AekKM7YuO5hMKFN3JQj4oV 9bYAnEuYOAfoX/oXLpVVNdz6cwA0nS/CGe/mX30ZsaVmeS763uJ4yksT3iobTTe/PoMD iD/JF+LuqxcvdiQUD/zscS8E1VqeEmorDntvxMgE/FHcUL2xV6JE0AYLX7IguxfH5rOC TVT6HCVqZU9URqJR2hwQEv6txIVpMyBpmFlirx8cpulaqqIdlP2snce9AUBJKr9od7Uj Xiog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766081254; x=1766686054; 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=rIeDWGFhJrJYlDWJ9QwORoAYI48CnzPSjwnaNMzWGBs=; b=StqAQ5pzE206HTG1bFqnUkVNjJdGZ3rvnE1v6JflOBvsyjJIvoxuakFXaK2h5eALKt bun4hZPfmbje64KZln/v5b9SGiJe+tVXWbl+X/S0SKH5rAxwbSSCUdeAueLIDLwxThqY dj8Ex4Ax2ceVN/MHbk8JBumnFf842Xm7QDptA0ImhjgmQA/9Lo/wLboqxm5xL0cYYtPQ I9Sym026iMH9BlfovZ7kqTORQBWfouN3SoYZVIgKKtrPw+TUjIjTJSBKjRp4po0E+vn4 pc8Khw9WF5I2zW92PGZXAV+wVsYLI0uOl3O+VSnxsihhvbbB8frn6sY+/y1iU3tZCCKR z43w== X-Forwarded-Encrypted: i=1; AJvYcCU23o41yUJTeQ9zvQ97CoZCUG/ohNNIi7J1fEQBU3gTVriKoQsaG5HHm/GsIJrlwjOev9Ysich5mlr460FR@lists.postgresql.org X-Gm-Message-State: AOJu0Yz5Gvhn5SsYtxl8ml/S9CETjMy4aelD6rb27ytKssAEbcbWEiMn gOPWyY8PgiGY3zXvzFwBQGPZj70LV1HHCZenP+ChKtT0G+R5CmFtWacrZSxjBAMd35kbI+eh004 +Zu0wJnIoLjSxj539ImDPlz2kGg/gvBg= X-Gm-Gg: AY/fxX4007QHUO6t7VkmE1ZyRuBFhhFS4oR5aRzIvVQMtNfN7NUmF9lj2Njfevky3N4 f0iLwS46misGAJIQBYGtudKK/Bs/aQ2g4/lRJRc49xbNx4Og3/r1N2dGn4GxH0PEb7qDOY6bnt6 uM14mnM54ayDtaIwhKkAkrBA44wWgkMFqJtphrxl9YSXKYeAB9VH+PLLMEKl8ylXOlZiWZ0wnV1 3FV2w7r7Fnh3v6dTGes7PrcUZWFH9WpmLhvagzfdfAbiBceVgQLG5u7nFVtFeCCV2sI9qql7axP f7uxJVpqpIDUotgukQ== X-Google-Smtp-Source: AGHT+IGGDi8JgT7eXwXi6tO7b74VusrvKkAPgvqp/AFzXsNKXy6B/7SBMK2Maht9EOoYiLe4nIUyn+lKbXfZqcpZNF4= X-Received: by 2002:a05:7023:907:b0:11a:51f9:db0 with SMTP id a92af1059eb24-121722b7184mr156688c88.11.1766081254348; Thu, 18 Dec 2025 10:07:34 -0800 (PST) MIME-Version: 1.0 References: <2wk7jo4m4qwh5sn33pfgerdjfujebbccsmmlownybddbh6nawl@mdyyqpqzxjek> In-Reply-To: From: Kirill Reshke Date: Thu, 18 Dec 2025 23:07:20 +0500 X-Gm-Features: AQt7F2pTnR-zf9yAsGt8sQcm-7tHEOIirwambc_ZDk2ZjCS-QBszoPVUCWZPv5o Message-ID: Subject: Re: eliminate xl_heap_visible to reduce WAL (and eventually set VM on-access) To: Melanie Plageman Cc: Andres Freund , Robert Haas , Andrey Borodin , PostgreSQL Hackers , Heikki Linnakangas , Chao Li Content-Type: multipart/mixed; boundary="000000000000cfdef206463dd532" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cfdef206463dd532 Content-Type: text/plain; charset="UTF-8" On Thu, 18 Dec 2025 at 20:18, Melanie Plageman wrote: > But you are right, I don't see any non-error code path where a heap > page would become empty (all line pointers set unused) and then not be > set all-visible. Only vacuum sets line pointers unused and if all the > line pointers are unused it will always set the page all-visible. > > I think, though, that if we error out in lazy_scan_prune() after > returning from heap_page_prune_and_freeze() such that we don't set the > empty page all-visible, we can end up with an empty page without > PD_ALL_VISIBLE set. You can see how this might work by patching the VM > set code in lazy_scan_prune() to skip empty pages. > Thank you for your explanation! I completely forgot that PD_ALL_VIS is a non-persistent change (hint bit). so its update can be trivially lost. The simplest real-life example is being killed just after returning from heap_page_prune_and_freeze, yes. PFA tap test covering lazy_scan_new_or_empty code path for empty-but-not-all-visible page -- Best regards, Kirill Reshke --000000000000cfdef206463dd532 Content-Type: application/octet-stream; name="v1-0001-Add-TAP-test-for-empty-page-vacuum.patch" Content-Disposition: attachment; filename="v1-0001-Add-TAP-test-for-empty-page-vacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjbr3dok0 RnJvbSBhYzgzODk1M2RlOWM0YWIwY2I1ZjEzZDFlMWI4YWQwYTE4ZTczZTM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByZXNoa2UgPHJlc2hrZUBkb3VibGUuY2xvdWQ+CkRhdGU6IFRo dSwgMTggRGVjIDIwMjUgMTg6MDA6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxXSBBZGQgVEFQ IHRlc3QgZm9yIGVtcHR5IHBhZ2UgdmFjdXVtLgoKVkFDVVVNIGNhbiBiZSBydW4gZm9yIGVtcHR5 IHBhZ2VzIHdpdGggRElTQUJMRV9QQUdFX1NLSVBQSU5HIG9wdGlvbi4KSW4gdGhpcyBjYXNlLCBW QUNVVU0gd2lsIHNldCB1cCBwYWdlLWxldmVsIHZpc2liaWxpdHkgYml0CihQRF9BTExfVklTSUJM RSkgaWYgbm90IHByZXZpb3VzbHkgc2V0LgpUbyBlbmQgdXAgd2l0aCBlbXB0eSBwYWdlIHdoaWNo IGlzIG1pc3NpbmcgdmlzaWJpbGl0eSBoaW50IGJpdCwgd2UgbmVlZAp0byBmb3JjZWZ1bHkgY2Fu Y2VsIChraWxsIC05KSBiYWNrZW5kLCBleGVjdXRpbmcgcGFnZSBmcmVlemluZywganN1dAphZnRl ciBpdCBkaWQgcGFnZSBwcnVuaW5nLiBVc2UgaW5qZWNpdG9uIHBvaW50IGZvciB0aGlzIHB1cnBv c2UgYW5kCmFkZCBUQVAgdGVzdCB0byBjb3ZlciAicmVjb3ZlcnkiIGFmdGVyIGVycm9yIGNvZGUg cGF0aC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAg fCAgNiArKwogLi4uL3Rlc3RfbWlzYy90LzAxMF92YWN1dW1fZW1wdHlfcGFnZS5wbCAgICAgIHwg NzUgKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTBfdmFj dXVtX2VtcHR5X3BhZ2UucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXgg MzA3NzhhMTU2MzkuLjliOGNiYjY3ZjExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6 eS5jCkBAIC0xNTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0u aCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19ydXNhZ2UuaCIKICNpbmNsdWRlICJ1dGls cy90aW1lc3RhbXAuaCIKQEAgLTE4OTksNiArMTkwMCw4IEBAIGxhenlfc2Nhbl9uZXdfb3JfZW1w dHkoTFZSZWxTdGF0ZSAqdmFjcmVsLCBCdWZmZXIgYnVmLCBCbG9ja051bWJlciBibGtubywKIAkJ ICovCiAJCWlmICghUGFnZUlzQWxsVmlzaWJsZShwYWdlKSkKIAkJeworCQkJSU5KRUNUSU9OX1BP SU5UKCJ2YWN1dW0tZW1wdHktcGFnZS1ub24tYWxsLXZpcyIsIE5VTEwpOworCiAJCQlTVEFSVF9D UklUX1NFQ1RJT04oKTsKIAogCQkJLyogbWFyayBidWZmZXIgZGlydHkgYmVmb3JlIHdyaXRpbmcg YSBXQUwgcmVjb3JkICovCkBAIC0yMDEyLDYgKzIwMTUsOSBAQCBsYXp5X3NjYW5fcHJ1bmUoTFZS ZWxTdGF0ZSAqdmFjcmVsLAogCQkJCQkJCSAgICZ2YWNyZWwtPm9mZm51bSwKIAkJCQkJCQkgICAm dmFjcmVsLT5OZXdSZWxmcm96ZW5YaWQsICZ2YWNyZWwtPk5ld1JlbG1pbk14aWQpOwogCisJCisJ SU5KRUNUSU9OX1BPSU5UKCJ2YWN1dW0taGVhcC1wcnVuZS1hbmQtZnJlZXplLWFmdGVyIiwgTlVM TCk7CisKIAlBc3NlcnQoTXVsdGlYYWN0SWRJc1ZhbGlkKHZhY3JlbC0+TmV3UmVsbWluTXhpZCkp OwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh2YWNyZWwtPk5ld1JlbGZyb3plblhpZCkp OwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMF92YWN1dW1f ZW1wdHlfcGFnZS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEwX3ZhY3V1bV9l bXB0eV9wYWdlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZjVj MzlkMjQzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3Qv MDEwX3ZhY3V1bV9lbXB0eV9wYWdlLnBsCkBAIC0wLDAgKzEsNzUgQEAKKyMgQ29weXJpZ2h0IChj KSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIENoZWNrIGhv dyB0ZW1wb3JhcnkgZmlsZSByZW1vdmFscyBhbmQgc3RhdGVtZW50IHF1ZXJpZXMgYXJlIGFzc29j aWF0ZWQKKyMgaW4gdGhlIHNlcnZlciBsb2dzIGZvciB2YXJpb3VzIHF1ZXJ5IHNlcXVlbmNlcyB3 aXRoIHRoZSBzaW1wbGUgYW5kCisjIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29scy4KKwordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7 CisKK2lmICgkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKK3sKKwlwbGFu IHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWls ZCc7Cit9CisKKyMgSW5pdGlhbGl6ZSBhIG5ldyBQb3N0Z3JlU1FMIHRlc3QgY2x1c3RlcgorbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRub2Rl LT5pbml0KCk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAor bG9nX21pbl9tZXNzYWdlcyA9ICdub3RpY2UnCispKTsKKyRub2RlLT5zdGFydDsKKworIyBDaGVj ayBpZiB0aGUgZXh0ZW5zaW9uIGluamVjdGlvbl9wb2ludHMgaXMgYXZhaWxhYmxlLCBhcyBpdCBt YXkgYmUKKyMgcG9zc2libGUgdGhhdCB0aGlzIHNjcmlwdCBpcyBydW4gd2l0aCBpbnN0YWxsY2hl Y2ssIHdoZXJlIHRoZSBtb2R1bGUKKyMgd291bGQgbm90IGJlIGluc3RhbGxlZCBieSBkZWZhdWx0 LgoraWYgKCEkbm9kZS0+Y2hlY2tfZXh0ZW5zaW9uKCdpbmplY3Rpb25fcG9pbnRzJykpCit7CisJ cGxhbiBza2lwX2FsbCA9PiAnRXh0ZW5zaW9uIGluamVjdGlvbl9wb2ludHMgbm90IGluc3RhbGxl ZCc7Cit9CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04g aW5qZWN0aW9uX3BvaW50czsnKTsKKworCisjIFNldHVwIHRhYmxlIGFuZCBwb3B1bGF0ZSB3aXRo IGRhdGEKKyRub2RlLT5zYWZlX3BzcWwoCisJInBvc3RncmVzIiwgcXF7CitDUkVBVEUgVEFCTEUg dmFjX2VtcHR5X3Rlc3QoYSBpbnQpOworQkVHSU47CitJTlNFUlQgSU5UTyB2YWNfZW1wdHlfdGVz dCBERUZBVUxUIFZBTFVFUzsKK1JPTExCQUNLOworfSk7CisKKyMgRnJvbSB0aGlzIHBvaW50LCBh dXRvdmFjdXVtIHdvcmtlciB3aWxsIHdhaXQgYXQgc3RhcnR1cC4KKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCd2YWN1dW0taGVh cC1wcnVuZS1hbmQtZnJlZXplLWFmdGVyJywgJ2Vycm9yJyk7Iik7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgndmFjdXVtLWVt cHR5LXBhZ2Utbm9uLWFsbC12aXMnLCAnbm90aWNlJyk7Iik7CisKKyRub2RlLT5wc3FsKCdwb3N0 Z3JlcycsICJWQUNVVU0gKEZSRUVaRSkgdmFjX2VtcHR5X3Rlc3Q7Iiwgb25fZXJyb3Jfc3RvcCA9 PiAxKTsKKworbXkgJG9mZnNldCA9IC1zICRub2RlLT5sb2dmaWxlOworCisjIFJ1biB2YWN1dW0s IGZvcmNlIGl0IG9uIGVtcHR5IHBhZ2UuIAorJG5vZGUtPnNhZmVfcHNxbCgKKwkicG9zdGdyZXMi LCBxcXsKK1ZBQ1VVTSAoRElTQUJMRV9QQUdFX1NLSVBQSU5HKSB2YWNfZW1wdHlfdGVzdDsKK30p OworCitvayggJG5vZGUtPmxvZ19jb250YWlucygKKwkJcXIvTk9USUNFOiAgbm90aWNlIHRyaWdn ZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IHZhY3V1bS1lbXB0eS1wYWdlLW5vbi1hbGwtdmlzLywK KwkJJG9mZnNldCksCisJInZhY3V1bSBzZXRzIGFsbC12aXNpYmxlIHBhZ2UgYml0IGZvciBlbXB0 eSBwYWdlIik7CisKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19kZXRhY2goJ3ZhY3V1bS1oZWFwLXBydW5lLWFuZC1mcmVlemUtYWZ0ZXIn KTsiKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9w b2ludHNfZGV0YWNoKCd2YWN1dW0tZW1wdHktcGFnZS1ub24tYWxsLXZpcycpOyIpOworCiskbm9k ZS0+c3RvcCgnZmFzdCcpOworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --000000000000cfdef206463dd532--