Re: WIP: BRIN multi-range indexes
Tomas Vondra <tomas.vondra@enterprisedb.com>
From: Tomas Vondra <tomas.vondra@enterprisedb.com>
To: John Naylor <john.naylor@enterprisedb.com>
Cc: Anastasia Lubennikova <a.lubennikova@postgrespro.ru>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-01-12T17:42:10Z
Lists: pgsql-hackers
On 1/12/21 6:28 PM, John Naylor wrote: > On Sat, Dec 19, 2020 at 8:15 PM Tomas Vondra > <tomas.vondra@enterprisedb.com <mailto:tomas.vondra@enterprisedb.com>> > wrote: > > [12-20 version] > > Hi Tomas, > > The measurements look good. In case it fell through the cracks, my > earlier review comments for Bloom BRIN indexes regarding minor details > don't seem to have been addressed in this version. I'll point to earlier > discussion for convenience: > > https://www.postgresql.org/message-id/CACPNZCt%3Dx-fOL0CUJbjR3BFXKgcd9HMPaRUVY9cwRe58hmd8Xg%40mail.gmail.com > <https://www.postgresql.org/message-id/CACPNZCt%3Dx-fOL0CUJbjR3BFXKgcd9HMPaRUVY9cwRe58hmd8Xg%40mail.gmail.com> > > https://www.postgresql.org/message-id/CACPNZCuqpkCGt8%3DcywAk1kPu0OoV_TjPXeV-J639ABQWyViyug%40mail.gmail.com > <https://www.postgresql.org/message-id/CACPNZCuqpkCGt8%3DcywAk1kPu0OoV_TjPXeV-J639ABQWyViyug%40mail.gmail.com> > Whooops :-( I'll go through those again, thanks for reminding me. > > The improvements are fairly minor: > > > > 1) Rejecting bloom filters that are clearly too large (larger than page) > > early. This is imperfect, as it works for individual index keys, not the > > whole row. But per discussion it seems useful. > > I think this is good enough. > > > So based on this I'm tempted to just use the version with two hashes, as > > implemented in 0005. It's much simpler than the partitioning scheme, > > does not need any of the logic to generate primes etc. > > Sounds like the best engineering decision. > > Circling back to multi-minmax build times, I ran a couple quick tests on > bigger hardware, and found that not only is multi-minmax slower than > minmax, which is to be expected, but also slower than btree. (unlogged > table ~12GB in size, maintenance_work_mem = 1GB, median of three runs) > > btree 38.3s > minmax 26.2s > multi-minmax 110s > > Since btree indexes are much larger, I imagine something algorithmic is > involved. Is it worth digging further to see if some code path is taking > more time than we would expect? > I suspect it'd due to minmax having to decide which "ranges" to merge, which requires repeated sorting, etc. I certainly don't dare to claim the current algorithm is perfect. I wouldn't have expected such big difference, though - so definitely worth investigating. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
BRIN minmax-multi indexes
- ab596105b55f 14.0 landed
-
BRIN bloom indexes
- 77b88cd1bb90 14.0 landed
-
Support the old signature of BRIN consistent function
- a681e3c107aa 14.0 landed
-
Remove unnecessary pg_amproc BRIN minmax entries
- a68dfa27d42f 14.0 landed
-
Optimize allocations in bringetbitmap
- 8e4b332e88b8 14.0 landed
-
Move IS [NOT] NULL handling from BRIN support functions
- 72ccf55cb99c 14.0 landed
-
Pass all scan keys to BRIN consistent function at once
- a1c649d889bd 14.0 landed
-
Properly detoast data in brin_form_tuple
- d2d3a4bd33d2 9.5.24 landed
- bae31e75f777 9.6.20 landed
- 0b96fc977c5b 10.15 landed
- 895d0f0e8218 11.10 landed
- 8149e9f9a0d6 12.5 landed
- 6a7b55f3716f 13.1 landed
- 7577dd84807a 14.0 landed