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 1wCJzK-001s59-0a for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 16:18:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCJzI-007nzo-11 for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 16:18:13 +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 1wCJzH-007nzf-2l for pgsql-hackers@lists.postgresql.org; Mon, 13 Apr 2026 16:18:12 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCJzF-00000000pCX-2brm for pgsql-hackers@lists.postgresql.org; Mon, 13 Apr 2026 16:18:11 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-67011a751d2so4964778a12.2 for ; Mon, 13 Apr 2026 09:18:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776097087; cv=none; d=google.com; s=arc-20240605; b=Nu9getjGsEEeqgfj/SwXmbcAYGKkVBs+Rk+0bWE4wr9mNixGa/gWaReJYKkmCaDmfz PlxdHOeD+aD8yuEsX9T9S7U2uW/01eS6gZ2/Pd5Kl6iHTobQ/SAs4wZt6yIAbgj0FTiL V6Xa5tuCa0tKEn4ASbrcI68qNeN3TTZ5FwAr4bdEOD62KXP+JxDS902MzsvuMYJcvqVX h/089WD+IljWMARPEF2L16pHV0dhE4QZ4szkj+V3g3Y8KVn0vxKer6C9woNm4xb2TsPf Tys2DjbDkcUfFOdi6oOABE2dg9Sad9ngGi+4+2mkFmTUv7M/xYAonVenWUgkdCzWj/qe QJRA== 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=pXr7oa8gIhJPGCstUMwlLEwhrVoauBO2b0r2z9h7kRg=; fh=riYpLoa7uJTjsPfmPTVyLzIy/pw7vtkt9TR+hFZOHOo=; b=kdDPL+/ZNMleiy0rqTFZrd0BO7EX68umwxGJ3nt/FtG/g9JDGWcNI6Xr2eKwde6mFJ rEIUNDcnBzPPProrRH2GpNcnVBH4awiyAl/kOiXbhBm/ZDgmRbTWX92Z9VHHGPN/CJMk CbDcnP5FTa8fdGCC8xAJ9aJo45dCWHzRjwBS42CpUQIBoCdnZrEQnBmiYTJt0aaq2t2L Nud+1hGPkyVOJjRwr23Y4LEq7pkBRComtWzzFHVRnyT4C/7S3xj6BYAoccA3HtpkJUF3 NRV/XkZun+BCY4qFzDWR1FEpviQ+JBNyzAlKx7WL2hervuNKa8+CCwyjOd8j5SfNaMPg 3CYA==; 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=1776097087; x=1776701887; 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=pXr7oa8gIhJPGCstUMwlLEwhrVoauBO2b0r2z9h7kRg=; b=NKbT8i/4fsdZZpUriLt9VuTMPr57DViJZBEazIvvjVieQXS6SJb1JlD7Vc5Y7hQi3K dFYaLxilnh11a5q/noMiWJCM33zw9SKQ0dsAf1DXhZQeJQkKZtMNcpVa9diMD/IB8b8O WzL538vvUTnpAYHDKrmWgAZa4CN/J1sAXxu3H/gf1MxfISHpdWaI+EVJ3v729C7WRxqL 21j4mWU8OuGyVta3U2SwzEFhTdmudfFUGznzF7Gn0p1L+N4jITnoj2kFFl+WfC1IxEHV Ws9mT5gBnHSLZkk2FqrtBNTiQrooXrivwxlxyVS3mQdh1HUwP3wKGvg0ZUCo1UECfFGS ZgWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776097087; x=1776701887; 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=pXr7oa8gIhJPGCstUMwlLEwhrVoauBO2b0r2z9h7kRg=; b=gpAOuWdBOlUK10sgqgquYcFQLzmDRIAJ6ESbGj6KB34noBj5/jy4bjZsUpbft3MHLH wX0Y5KVMt0vJHuTzFk8MKPP65tTkOuH6Y6VNXiGJR+GohJoUABft7Yu6Gg54dkU7g4+B S4Y/rrlpZ9GO7GLIN8zf7AlhPNyr2/44sxO1ANOkKNQJUKBHyEMw6HZztsUf9qo8VkyI iwlRcJkQPK3IpBh4q1yyUtp+xqrQLG3SOaxHARsFGkkYcF7n+T40LiHUkdrDhyxET+Bz ZDyCpK2ogSLlc9537/V7y1+bU1owpvNkbhskQLbEiXn4vu2OG7H8n0hCGSJz0Zk0Bn5c BxMg== X-Forwarded-Encrypted: i=1; AFNElJ8DOnsx9MBrD3qSlEgtUOs7PZvYA2TVzBWgwlxPSVL3oF3cA1BneEwgCuMfW50UeCEx8h0PxRUcnOHP2ABE@lists.postgresql.org X-Gm-Message-State: AOJu0YzxzYahc7oDVRcPkXnww11oF8cOd1+TvXEgQ6qPMmP+21xKkH9l h33PmjkK8RRuHb42Kv9bHZ34cP1eyZQYa8xficHRaMNtSPCYDZlRu8uPcwwsVyWI4cNcYFQYlRb omeJKehAaXO6MfH389msMeHxY8BuGPrA= X-Gm-Gg: AeBDievqD23jQ0I46iJ7rsG+HuJxMiSNMOfwgs6ebh+sj7n+oxUoSzQoo+dn+8rdYSs UN1Y8eEb/ygH4x/bi1l0bPVqHZi6StDwgVHIAy8vmpLmoyvcS9uW+pkN9KX+pUxcdFwB5cDw0G9 8u7BlWWx8VGkt7aSF1+0pFPG2j4WWlm8PqlsLvHMR+cVXzaz8Of8+4Xs0fsRdFOEDO4+xILIaIJ YCAsmWdSGBKZ0/UNYCLr0LuCMU1b24nbkWfqddtDRTojl7XnWYjRQwOShXOjar5Fg0VsYspF2Ne q1sl5WDdWIumkpXCjpRiPpnUwWHChEgOCEQwewtSGJo+0UDWZmh+QLcYKwKi2T3jTlc5jfP5V2W XSAfrRJiYn/x6utYPVFs= X-Received: by 2002:a05:6402:4349:b0:671:c135:a78b with SMTP id 4fb4d7f45d1cf-671c135a98dmr829814a12.17.1776097086879; Mon, 13 Apr 2026 09:18:06 -0700 (PDT) MIME-Version: 1.0 References: <7clovcjtacv6peujpfaimeynrkcd4anp6ohbdd3ncgtjo67anb@ylcccepdiuz2> In-Reply-To: From: Melanie Plageman Date: Mon, 13 Apr 2026 12:17:54 -0400 X-Gm-Features: AQROBzCJnY1CSI4xrzsOQyLTfDDrnSIA9z2mLuON7hqlQ6JzT3TQjJx_WKSovH8 Message-ID: Subject: Re: eliminate xl_heap_visible to reduce WAL (and eventually set VM on-access) To: Alexey Makhmutov Cc: Andres Freund , PostgreSQL Hackers , Kirill Reshke , Andrey Borodin , Robert Haas , Heikki Linnakangas Content-Type: multipart/mixed; boundary="000000000000f3765f064f59d383" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f3765f064f59d383 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 11:32=E2=80=AFAM Alexey Makhmutov wrote: > > This makes sense. I'd like just to put some context here: I was checking > the FSM update case in scope of the thread > https://www.postgresql.org/message-id/flat/596c4f1c-f966-4512-b9c9-dd8fbc= af0928@postgrespro.ru, > in which I was specifically looking at the case with outdated FSM data > (showing lots of free space) on standby causing a significant > performance hit after switchover. As example this include case with > table having fillfactor<=3D80 which has prior bulk rows deletes + > insertion. In this case (mostly) empty FSM block may be delivered to > standby via FPI, but subsequent inserts may be lost due to the 20% > heuristic. Moreover, updates to FSM may be lost even for blocks filled > for more than 80% due to missing dirty flag as described in that thread. > > In my understanding the FSM update during processing of the > 'heap_xlog_visible' function on standby was kind of 'last line of > defense' for any corner case scenario with FSM update (as block would > not be visited by the vacuum process once it's marked as 'all visible') > and it was introduced in > https://www.postgresql.org/message-id/20180802172857.5skoexsilnjvgruk@alv= herre.pgsql > (ab7dbd681) specifically for this purpose. Now, as logic of > 'heap_xlog_visible' is merged into 'heap_xlog_prune_freeze', so this > task is carried by this function. > > I fully agree that having exactly zero-space seems to be a very uncommon > situation (and probably not reproducible with tables having > fillfactor<=3D80). I've just noted that such case was processed by the ol= d > logic in the 'heap_xlog_visible', while current implementation in > 'heap_xlog_prune_freeze' skips it. The scenario causing inaccurate freespace maps after promotion is technically possible though improbable. Moreover, I don't see a downside to changing it. Patch I plan to commit is attached. I don't quite understand why heap_xlog_insert() considers whether the heap page was an FPI before updating the FSM though. I know we need some heuristic to avoid doing it for every record, but the FPI consideration doesn't make sense to me. - Melanie --000000000000f3765f064f59d383 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Update-FSM-when-updating-VM-even-if-freespace-is-zer.patch" Content-Disposition: attachment; filename="0001-Update-FSM-when-updating-VM-even-if-freespace-is-zer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnxea7ip0 RnJvbSBlYjk0MDM2NzZkNjFjMzJmNDUxMzllZjY1NTkzNjYxODJhZmQ2MDhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBNb24sIDEzIEFwciAyMDI2IDExOjUwOjMyIC0wNDAwClN1YmplY3Q6IFtQ QVRDSF0gVXBkYXRlIEZTTSB3aGVuIHVwZGF0aW5nIFZNIGV2ZW4gaWYgZnJlZXNwYWNlIGlzIHpl cm8KCmFkZDMyM2RhNDBhIHN0YXJ0ZWQgdXBkYXRpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluIHRo ZSBzYW1lIFdBTCByZWNvcmQKYXMgcHJ1bmluZyBhbmQgZnJlZXppbmcuIFRoaXMgaW5jbHVkZWQg dXBkYXRpbmcgdGhlIGZyZWVzcGFjZSBtYXAgZHVyaW5nCnJlcGxheSwgd2hpY2ggd2UndmUgZG9u ZSBzaW5jZSBhYjdkYmQ2ODEuCgphZGQzMjNkYTQwYSwgaG93ZXZlciwgY29uZGl0aW9uZWQgZG9p bmcgc28gb24gdGhlcmUgYmVpbmcgPiAwIGZyZWVzcGFjZSwKd2hpY2ggZGlmZmVyZWQgZnJvbSB0 aGUgcHJldmlvdXMgc3RhdGUuIFRoZSBGU00gaXMgbm90IFdBTC1sb2dnZWQgYW5kIGlzCmluc3Rl YWQgdXBkYXRlZCBoZXVyaXN0aWNhbGx5IG9uIHN0YW5kYnlzLiBJbiByYXJlIGNhc2VzLCBpZiB0 aGUgRlNNIGlzCm5vdCB1cGRhdGVkIHdoaWxlIHJlcGxheWluZyBpbnNlcnRzLCB0aGVyZSBpcyAw IGZyZWVzcGFjZSwgYW5kIHZhY3V1bQpyZXBsYXkgZG9lc24ndCB1cGRhdGUgdGhlIEZTTSB3aGVu IHNldHRpbmcgdGhlIHBhZ2UKYWxsLXZpc2libGUvYWxsLWZyb3plbiwgYWZ0ZXIgdGhlIHN0YW5k YnkgaXMgcHJvbW90ZWQgYW5kIHJ1bnMgdmFjdXVtLAppdCBtYXkgc2tpcCB0aG9zZSBwYWdlcyBh bmQgdGhlbiBwcm9wYWdhdGUgb3Zlcmx5IG9wdGltaXN0aWMgbnVtYmVycyB1cAp0aGUgRlNNLCBj YXVzaW5nIHNsb3duZXNzIHdoZW4gc2VhcmNoaW5nIGZvciBmcmVlc3BhY2UgZm9yIG5ldyB0dXBs ZXMuCgpGaXggaXQgYnkgYWx3YXlzIHVwZGF0aW5nIHRoZSBGU00gd2hlbiByZXBsYXlpbmcgc2V0 dGluZyB0aGUgVk0uCgpBdXRob3I6IE1lbGFuaWUgUGxhZ2VtYW4gPG1lbGFuaWVwbGFnZW1hbkBn bWFpbC5jb20+ClJlcG9ydGVkLWJ5OiBBbGV4ZXkgTWFraG11dG92IDxhLm1ha2htdXRvdkBwb3N0 Z3Jlc3Byby5ydT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lYWQyZjExMC1jNzM2 LTQ4ZjUtOTllMS0wMjNkYzlhY2JmMGIlNDBwb3N0Z3Jlc3Byby5ydQotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMgfCA2ICsrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f eGxvZy5jCmluZGV4IGYzZjQxOWQzZGMxLi45ZWQ3MDI0ZTgxNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1feGxvZy5jCkBAIC0zOCw2ICszOCw3IEBAIGhlYXBfeGxvZ19wcnVuZV9mcmVl emUoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRC dWZmZXI7CiAJdWludDgJCXZtZmxhZ3MgPSAwOwogCVNpemUJCWZyZWVzcGFjZSA9IDA7CisJYm9v bAkJZG9fdXBkYXRlX2ZzbSA9IGZhbHNlOwogCiAJWExvZ1JlY0dldEJsb2NrVGFnKHJlY29yZCwg MCwgJnJsb2NhdG9yLCBOVUxMLCAmYmxrbm8pOwogCW1lbWNweSgmeGxyZWMsIG1haW5kYXRhcHRy LCBTaXplT2ZIZWFwUHJ1bmUpOwpAQCAtMjExLDcgKzIxMiwxMCBAQCBoZWFwX3hsb2dfcHJ1bmVf ZnJlZXplKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJCQkJCVhMSFBfSEFTX0RFQURfSVRF TVMgfAogCQkJCQkJCVhMSFBfSEFTX05PV19VTlVTRURfSVRFTVMpKSB8fAogCQkJKHZtZmxhZ3Mg JiBWSVNJQklMSVRZTUFQX1ZBTElEX0JJVFMpKQorCQl7CiAJCQlmcmVlc3BhY2UgPSBQYWdlR2V0 SGVhcEZyZWVTcGFjZShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOworCQkJZG9fdXBkYXRlX2ZzbSA9 IHRydWU7CisJCX0KIAogCQkvKgogCQkgKiBXZSB3YW50IHRvIGF2b2lkIGhvbGRpbmcgYW4gZXhj bHVzaXZlIGxvY2sgb24gdGhlIGhlYXAgYnVmZmVyIHdoaWxlCkBAIC0yNDgsNyArMjUyLDcgQEAg aGVhcF94bG9nX3BydW5lX2ZyZWV6ZShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoQnVm ZmVySXNWYWxpZCh2bWJ1ZmZlcikpCiAJCVVubG9ja1JlbGVhc2VCdWZmZXIodm1idWZmZXIpOwog Ci0JaWYgKGZyZWVzcGFjZSA+IDApCisJaWYgKGRvX3VwZGF0ZV9mc20pCiAJCVhMb2dSZWNvcmRQ YWdlV2l0aEZyZWVTcGFjZShybG9jYXRvciwgYmxrbm8sIGZyZWVzcGFjZSk7CiB9CiAKLS0gCjIu NDMuMAoK --000000000000f3765f064f59d383--