Hi,

> 3 авг. 2021 г., в 03:01, Andres Freund <and...@anarazel.de> написал(а):
> 
> Hi,
> 
> On 2021-08-03 00:07:23 +0300, Michail Nikolaev wrote:
>> The main idea is simple optimistic optimization - store offset to next
>> valid entry. So, in most cases, we could just skip all the gaps.
>> Of course, it adds some additional impact for workloads without long
>> (few seconds) transactions but it is almost not detectable (because of
>> CPU caches).
> 
> I'm doubtful that that's really the right direction. For workloads that
> are replay heavy we already often can see the cost of maintaining the
> known xids datastructures show up significantly - not surprising, given
> the datastructure. And for standby workloads with active primaries the
> cost of searching through the array in all backends is noticeable as
> well.  I think this needs a bigger data structure redesign.

KnownAssignedXids implements simple membership test idea. What kind of redesign 
would you suggest? Proposed optimisation makes it close to optimal, but needs 
eventual compression.

Maybe use a hashtable of running transactions? It will be slightly faster when 
adding\removing single transactions. But much worse when doing 
KnownAssignedXidsRemove().

Maybe use a tree? (AVL\RB or something like that) It will be slightly better, 
because it does not need eventual compression like exiting array.

Best regards, Andrey Borodin.

Reply via email to