Re: [PoC] Improve dead tuple storage for lazy vacuum - Mailing list pgsql-hackers
From | John Naylor |
---|---|
Subject | Re: [PoC] Improve dead tuple storage for lazy vacuum |
Date | |
Msg-id | CANWCAZZz0XRvS6wDKxH8WDwAvwR5ZV5Jg5mq79xw+HHnkAUEzw@mail.gmail.com Whole thread Raw |
In response to | Re: [PoC] Improve dead tuple storage for lazy vacuum (Masahiko Sawada <sawada.mshk@gmail.com>) |
Responses |
Re: [PoC] Improve dead tuple storage for lazy vacuum
Re: [PoC] Improve dead tuple storage for lazy vacuum |
List | pgsql-hackers |
I took a look at the coverage report from [1] and it seems pretty good, but there are a couple more tests we could do. - RT_KEY_GET_SHIFT is not covered for key=0: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L803 That should be fairly simple to add to the tests. - Some paths for single-value leaves are not covered: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L904 https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L954 https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L2606 However, these paths do get regression test coverage on 32-bit machines. 64-bit builds only have leaves in the TID store, which doesn't (currently) delete entries, and doesn't instantiate the tree with the debug option. - In RT_SET "if (found)" is not covered: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L1768 That's because we don't yet have code that replaces an existing value with a value of a different length. - RT_FREE_RECURSE isn't well covered: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L1768 The TID store test is pretty simple as far as distribution of block keys, and focuses more on the offset bitmaps. We could try to cover all branches here, but it would make the test less readable, and it's kind of the wrong place to do that anyway. test_radixtree.c does have a commented-out option to use shared memory, but that's for local testing and won't be reflected in the coverage report. Maybe it's enough. - RT_DELETE: "if (key > tree->ctl->max_val)" is not covered: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L2644 That should be easy to add. - RT_DUMP_NODE is not covered, and never called by default anyway: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/include/lib/radixtree.h.gcov.html#L2804 It seems we could just leave it alone since it's debug-only, but it's also a lot of lines. One idea is to use elog with DEBUG5 instead of commenting out the call sites, but that would cause a lot of noise. - TidStoreCreate* has some memory clamps that are not covered: https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/backend/access/common/tidstore.c.gcov.html#L179 https://anarazel.de/postgres/cov/16-vs-HEAD-2024-04-14/src/backend/access/common/tidstore.c.gcov.html#L234 Maybe we could experiment with using 1MB for shared, and something smaller for local. [1] https://www.postgresql.org/message-id/20240414223305.m3i5eju6zylabvln%40awork3.anarazel.de
pgsql-hackers by date: