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 1vgRdL-00CsKz-1s for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 17:59:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgRdK-0015oh-2T for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 17:59:46 +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 1vgRdK-0015oX-17 for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 17:59:46 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgRdI-000bcE-0h for pgsql-hackers@postgresql.org; Thu, 15 Jan 2026 17:59:45 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-5014f383df6so8895131cf.1 for ; Thu, 15 Jan 2026 09:59:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768499984; cv=none; d=google.com; s=arc-20240605; b=R/D4XZnWD7nFagMUXjsLgSho4gjSl9QribDGPFlbYbaxv42idGw3UBiL/bfvLLpUH4 5R7epoqyqwVse6Yywsl5Zb+01XKU21t2IdWu9SR5trbcxXV+QP2Z/tB8BXAzuXI/wQIX WzYBNswJBmfryULxqbq0CioFSkUEZimySmR6r/1BvlHl4DiHk2RhTyAUuKYNwO6dQe3f WbGUMK+ztddY1JtAbh5d7WRyHFwBQmjL/5RQYKSNVLmeEsGlnx8RqZG+H6YfefWmqn+X Q3QpfJzELLKNXuETBfbTAKj8ivBqZH4S4SzZ7cgYS1DVAqzy3bSREsM1JAckcWjhWisz okIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=qZ9VQRfcMpcOPW+HbqrGAMi6cXicDrEsFwePsCU5wgg=; fh=RfrkJab44jNT7RraF/sJO97r9/nkUL0AAgzmC7PBS2w=; b=JG4KqchbsFcb0E8XU6inj6gDzoky9WpWlUu6myA5cvquWnWwwE39ZjxKoz2KAu6etL zHYPMMCB/w5Dvqwdvm83b3Y/dMPrQdlkGChP8UbsaYgVXzW0/U9Xt05bZ2Dy2dxOzdc2 vbSSRvD3gvs2OaR8QkrNh8mjCNEkUkj9nzSID2uEwQhCKhyQ3cqPd5UlzDKx/krJaITu wte+bei3K+TXEM3RZ/DuWLB6nPaoJ6R/vGWji+N3cdPtwQyJffXoGtoNSK4HwPpIvvCP 55Cq1Tq7wKApg4K5BGRPCK1FsfB2JnjzMNIokFe7MDCeVNkQX2qT9aXiSi5se2OJLeH6 fsSw==; darn=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=1768499984; x=1769104784; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=qZ9VQRfcMpcOPW+HbqrGAMi6cXicDrEsFwePsCU5wgg=; b=LoLe39xuUlqd9FRYh8eyrXNOVKHkaIjMZuss7tSwoO+f620xcewf7/fgSP3M0QQM7u FYAHDIjrvZqqosGedjq2jhCLlhN0MEFa3GWJrUX0uxjETSZctxobHcJoBLBBIWuQBKuj Pjh0vV/VtkoZXMJk5xR8DaQhrCjRlTBCEGgqQQnvnPOjzmjo+OZqnezOKRepgpxqU8RD dhzjW1Ny/6IYssHPW+Nb7pa5t6PiBnpiUbdovsNL2qyFpXGW5Gjpp8eV6kDvPN20RIHU CniXudSSa+kDCg6bcTBQkbk6Bpovh5Fyf2bAqEPdur9kz65UcDE47fYjee+e39qw/uJm Qqew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768499984; x=1769104784; h=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=qZ9VQRfcMpcOPW+HbqrGAMi6cXicDrEsFwePsCU5wgg=; b=BlDHK3s60qbs+3qVKEQnv6CotOEUojIVEpOce0rdskZjtqqNmZZ7McrVdP74smwxzl dNgtxfpWlpOhf0xL01QpQiroiPIYGaqyca9XctunpER7fFB4CWE6VQQjrgTlz2Tl6wwg sheK8uRshHH70vuZU4CEfG8bqIqcRPuD7zYgBTyCGCD5JgxyWRf6xWrziXO880t+Oov/ i23IF6YPv4h9p/FzkZRLvG9mrOd8sVpCSy7j00SbVrHWGWIyTS5KOoqCsArRNjPO2oVK 6bp68qshsk5dC8MEBcDb0XnPToUEK/P11lIpUHCZrCuUVfThBQ8O8zAHUTp1HFxppQ0M iYbQ== X-Gm-Message-State: AOJu0YzbXT3jaxV++TgIWR7S045wb5p32cbW9zgppo1+jL+mmQauds0j yCCKJfOzTfRG3yerMXBRp8Rel7jLFxF87ku/1pr+0k4rcKTovGc57CB+rNu2sunVoA9S/DktTLh DzDxMwzYm9OcAOswUsTmZXYuxGXgMrxG3SQ== X-Gm-Gg: AY/fxX7T5Oyk1/WLI3Z7OCBOE4+CnsRYvPPS3rDUb6yj2/R0QlcXiqXPliq4/cEPVMP lgwM1YY3YLpbswmZTEk2cXt9dhAy9GxP+IA5UqfbIf42kI16JNUv5uYfpHpBgEhfenp20+ez77P DmMAdm1VYUKOlxDaf69Ob9TxHxD+7QhlKlIbsZrLIwfrrTN1VUimmtoKGYVoLEVAYTYOAB005Mu fSBJqiU1K64ImyywJ55HbMEvCdfa1T8CZlfv3Nfnj58h0ExKwfm5ePQ1F1BW9F+fDKOSJ6GzwJl W3T7Vg2+bebK7Sd3bkJ1suf63C+XNUiktlSVVrr4coaHAApznZxjwePEBW7bAYEVt6tQ9g== X-Received: by 2002:ac8:7d53:0:b0:4ee:4a8b:d9ed with SMTP id d75a77b69052e-502a177b6c0mr5365111cf.58.1768499983799; Thu, 15 Jan 2026 09:59:43 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Kirill Reshke Date: Thu, 15 Jan 2026 22:59:31 +0500 X-Gm-Features: AZwV_QhrxJn6vox17bkoswtWbhxQmyY_1DupVDdf8eGd73MVdY29Nes2pEO-Z3A Message-ID: Subject: Re: Fix gistkillitems & add regression test to microvacuum To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000520b04064870fd45" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000520b04064870fd45 Content-Type: text/plain; charset="UTF-8" On Thu, 15 Jan 2026 at 13:35, Kirill Reshke wrote: > > On Thu, 15 Jan 2026 at 13:21, Kirill Reshke wrote: > > > > On Thu, 15 Jan 2026 at 12:46, Kirill Reshke wrote: > > > > > > On Thu, 15 Jan 2026 at 12:00, Kirill Reshke wrote: > > > > > > > > Hi hackers. > > > > > > > > While looking at [0] I noticed that XLOG_GIST_DELETE & XLOG_GIST_PAGE_DELETE > > > > records are not covered. > > > > > > > > This thread addresses XLOG_GIST_DELETE, which is also known as a > > > > microvacuum feature. > > > > > > > > test.sql contains regression test that trigger this code to be > > > > exercised in stream_regress.pl TAP test. > > > > > > > > Test is as follows: we create a gist index on the table, then we > > > > insert exactly 407 records, making the root page full (next insert > > > > will trigger page split). Then I delete all tuples from relation and > > > > trigger Index Only scan to do kill-on-select (killtuples). It marks > > > > gist 0 page (which is root and is leaf) as has_garbage. Then, the next > > > > insertion triggers xlog_gist_delete record. > > > > > > > > To verify this I use pageinspect and pg_waldimp (locally). Also this > > > > test is dependent on block size being 8192 which is not good. > > > > > > > > > > > > And all of this does not work actually without v1-0001, because there > > > > is a bug in GiST which does not call gistkillitmes for the very first > > > > (root) page. > > > > > > > > There is also test2.sql which inserts a single tuple, not 407. It can > > > > be used to verify v1-0001. > > > > > > > > [0] coverage.postgresql.org/src/backend/access/gist/gistxlog.c.gcov.html > > > > > > > > > > > > -- > > > > Best regards, > > > > Kirill Reshke > > > > > > > > > From cf feedback it turns out we already have an isolation test for > > > this, and it does almost exactly the same. > > > And more, it fails. > > > Will try to fix > > > > > > > > > -- > > > Best regards, > > > Kirill Reshke > > > > This looks like gist does not work for small indexes and this is > > explicitly tested after [0] > > [0] https://www.postgresql.org/message-id/lxzj26ga6ippdeunz6kuncectr5gfuugmm2ry22qu6hcx6oid6%40lzx3sjsqhmt6 > > > > > > -- > > Best regards, > > Kirill Reshke > > I was right on commit message of 377b7ab > > """ > For gist some related paths were reached, but gist's implementation > seems to not work if all the dead tuples are on one page (or something > like that). The coverage for other index types was rather incidental. > """ > > It does not work if all the dead tuples are on one page and this page is ROOT. > > So, should we delete this > > ... > # Test gist, but with fewer rows - shows that killitems doesn't work anymore! > permutation > create_table fill_10 create_ext_btree_gist create_gist flush > disable_seq disable_bitmap > > ... > > from isolation spec? > > > -- > Best regards, > Kirill Reshke PFA v2 which leaves the test in-place. Also commit message improvements. -- Best regards, Kirill Reshke --000000000000520b04064870fd45 Content-Type: application/octet-stream; name="v2-0001-Fix-gistkillitems-for-GiST-ROOT-page.patch" Content-Disposition: attachment; filename="v2-0001-Fix-gistkillitems-for-GiST-ROOT-page.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfr7cpa0 RnJvbSBjNmQ4OWQ2YmRjZGEzYmQ1M2JlYjEyMGJlNzdmMjQ4MzhlNGI1YjNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByZXNoa2UgPHJlc2hrZUBkb3VibGUuY2xvdWQ+CkRhdGU6IFRo dSwgMTUgSmFuIDIwMjYgMDY6MzQ6NDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYyXSBGaXggZ2lz dGtpbGxpdGVtcyBmb3IgR2lTVCBST09UIHBhZ2UuCgpHaVNUIGluZGV4IGtpbGxpdGVtcyBmZWF0 dXJlIG1pc2JlaGF2ZXMgZm9yIHNpbmdsZS1wYWdlCihST09ULW9ubHkpIEdpU1QgaW5kZXguIFRo aXMgaXMgY2F1c2VkIGJ5IEdpU1Qgc2NhbgoiY3VycmVudCBibG9jayIgdmFyaWFibGUgbm90IGJl aWduIGluaXRpYWxpemVkIGZvcgp2ZXJ5IGZpcnN0LXRvLXNjYW4gcGFnZSAod2hpY2ggaXMgUk9P VCBwYWdlKS4KRml4IHRoaXMgYnkgbW92aW5nIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIGluCnJl YWQgcGdhZSB1dGlsaXR5IGZ1bmN0aW9uLiBBbHNvIGFkanVzdCB0ZXN0IG91dHB1dAp0aGF0IHVz ZWQgdG8gdGVzdCBleGFjdGx5IHRoaXMgYnVnIChzdGFydGluZyAzNzdiN2FiKS4KCkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FMZFNTUGdaV1hfRDglMkJGeDRZUXFSTjVlVzVpU3hf ckpkcVFoQ2ZkV1R2cUtYVmZKNHclNDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2x4emoyNmdhNmlwcGRldW56Nmt1bmNlY3RyNWdmdXVnbW0ycnkyMnF1Nmhj eDZvaWQ2QGx6eDNzanNxaG10NgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQu YyAgICAgICAgICAgICAgfCA2ICsrKy0tLQogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3Rl ZC9raWxsdHVwbGVzLm91dCB8IDIgKy0KIHNyYy90ZXN0L21vZHVsZXMvaW5kZXgvc3BlY3Mva2ls bHR1cGxlcy5zcGVjICAgfCAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 Z2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKaW5kZXggMTFiMjE0ZWI5 OWIuLjdkYzM0NjgwZTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 Z2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jCkBAIC00MDcsNiAr NDA3LDkgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0g KnBhZ2VJdGVtLAogCSAqLwogCXNvLT5jdXJQYWdlTFNOID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1 ZmZlcik7CiAKKwkvKiBzYXZlIGN1cnJlbnQgaXRlbSBCbG9ja051bWJlciBmb3IgZ2lzdGtpbGxp dGVtcygpIGNhbGwgKi8KKwlzby0+Y3VyQmxrbm8gPSBwYWdlSXRlbS0+Ymxrbm87CisKIAkvKgog CSAqIGNoZWNrIGFsbCB0dXBsZXMgb24gcGFnZQogCSAqLwpAQCAtNzIyLDkgKzcyNSw2IEBAIGdp c3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCiAJCQkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkJCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2Nr TnVtYmVyIGZvciBuZXh0IGdpc3RraWxsaXRlbXMoKSBjYWxsICovCi0JCQkJc28tPmN1ckJsa25v ID0gaXRlbS0+Ymxrbm87Ci0KIAkJCQkvKgogCQkJCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBw YWdlLCBJdGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcAogCQkJCSAqIHR1cGxlcyBhcmUgc3Rv cmVkIGluIHNvLT5wYWdlRGF0YS4gIElmIHRoZXJlIGFyZSBhbnkgb24KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvaW5kZXgvZXhwZWN0ZWQva2lsbHR1cGxlcy5vdXQgYi9zcmMvdGVzdC9t b2R1bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0CmluZGV4IGJlN2RkZDc1NmVmLi5m NTA0ZWNhNzZkZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9r aWxsdHVwbGVzLm91dAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0 dXBsZXMub3V0CkBAIC0yMjMsNyArMjIzLDcgQEAgc3RlcCBmbHVzaDogU0VMRUNUIEZST00gcGdf c3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CiBzdGVwIHJlc3VsdDogU0VMRUNUIGhlYXBfYmxrc19y ZWFkICsgaGVhcF9ibGtzX2hpdCAtIGNvdW50ZXIuaGVhcF9hY2Nlc3NlcyBBUyBuZXdfaGVhcF9h Y2Nlc3NlcyBGUk9NIGNvdW50ZXIsIHBnX3N0YXRpb19hbGxfdGFibGVzIFdIRVJFIHJlbG5hbWUg PSAna2lsbF9wcmlvcl90dXBsZSc7CiBuZXdfaGVhcF9hY2Nlc3NlcwogLS0tLS0tLS0tLS0tLS0t LS0KLSAgICAgICAgICAgICAgICAxCisgICAgICAgICAgICAgICAgMAogKDEgcm93KQogCiBzdGVw IGRyb3BfdGFibGU6IERST1AgVEFCTEUgSUYgRVhJU1RTIGtpbGxfcHJpb3JfdHVwbGU7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNzL2tpbGx0dXBsZXMuc3BlYyBiL3Ny Yy90ZXN0L21vZHVsZXMvaW5kZXgvc3BlY3Mva2lsbHR1cGxlcy5zcGVjCmluZGV4IDc3ZmU4YzY4 OWE3Li43ZjkxMmE0MGYxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVj cy9raWxsdHVwbGVzLnNwZWMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxs dHVwbGVzLnNwZWMKQEAgLTk0LDcgKzk0LDcgQEAgcGVybXV0YXRpb24KICAgbWVhc3VyZSBhY2Nl c3MgZmx1c2ggcmVzdWx0CiAgIGRyb3BfdGFibGUgZHJvcF9leHRfYnRyZWVfZ2lzdAogCi0jIFRl c3QgZ2lzdCwgYnV0IHdpdGggZmV3ZXIgcm93cyAtIHNob3dzIHRoYXQga2lsbGl0ZW1zIGRvZXNu J3Qgd29yayBhbnltb3JlIQorIyBUZXN0IGdpc3QsIGJ1dCB3aXRoIGZld2VyIHJvd3MgLSB0aGF0 IGtpbGxpdGVtcyB1c2VkIHRvIGJlIGJ1Z2d5LgogcGVybXV0YXRpb24KICAgY3JlYXRlX3RhYmxl IGZpbGxfMTAgY3JlYXRlX2V4dF9idHJlZV9naXN0IGNyZWF0ZV9naXN0IGZsdXNoCiAgIGRpc2Fi bGVfc2VxIGRpc2FibGVfYml0bWFwCi0tIAoyLjQzLjAKCg== --000000000000520b04064870fd45--