At Tue, 4 Oct 2022 17:15:31 -0700, Nathan Bossart <nathandboss...@gmail.com> wrote in > On Tue, Oct 04, 2022 at 07:53:11PM -0400, Tom Lane wrote: > > I wrote: > >> PFA a quick-hack fix that solves this issue by making per-transaction > >> subsidiary hash tables. That's overkill perhaps; I'm a little worried > >> about whether this slows down normal cases more than it's worth. > >> But we ought to do something about this, because aside from the > >> duplication aspect the current storage of these lists seems mighty > >> space-inefficient. > > > > After further thought, maybe it'd be better to do it as attached, > > with one long-lived hash table for all the locks. This is a shade > > less space-efficient than the current code once you account for > > dynahash overhead, but the per-transaction overhead should be lower > > than the previous patch since we only need to create/destroy a hash > > table entry not a whole hash table.
First one is straight forward outcome from the current implement but I like the new one. I agree that it is natural and that the expected overhead per (typical) transaction is lower than both the first one and doing the same operation on a list. I don't think that space inefficiency in that extent doesn't matter since it is the startup process. > This feels like a natural way to solve this problem. I saw several cases > of the issue that was fixed with 6301c3a, so I'm inclined to believe this > usage pattern is actually somewhat common. So releasing locks becomes somewhat slower? But it seems to still be far faster than massively repetitive head-removal in a list. regards. -- Kyotaro Horiguchi NTT Open Source Software Center