Hi,

Just logged into commitfest for the first time, perhaps that's why.
Can you try again?

[image: image.png]

Best,
Dhruv Aron

On Mon, Sep 21, 2026 at 4:56 AM Alexandre Felipe <
[email protected]> wrote:

> Hello,
>
> I want to create a commit fest entry for this, but I can't find Dhruv Aron
> there.
>
> [image: image.png]
>
> On Mon, Sep 14, 2026 at 7:34 PM Alexandre Felipe <
> [email protected]> wrote:
>
>> v4.0 is not so fancy, but it works.
>>
>> No apparent bugs on this version, passing check-world [1]
>> The best test to stress this feature is in the recovery suite [2]
>> The main open question is whether we should add a second attempt if we
>> have
>> a lookup miss and the partition is locked (who knows it was locked by
>> someone
>> inserting the tag we want).
>>
>> I am curious to see the results of this with some real pgbench. So I
>> would be
>> grateful if some of you can stress that out.
>>
>> This version keeps the lock for insertion (and deletions), on the first
>> failure at
>> lookup, it acquires a LW_SHARED there too. These failures are very rare
>> so the impact of that lock in performance should be negligible compared to
>> acquiring the lock for every lookup.
>>
>> Not having to acquire a lock on its own can make the buffer lookup faster
>> (buffer hits).
>>
>> I am pasting three tables from my own benchmarks, from which I would like
>> to highlight a few results.
>> LWLockAcquire, LWLockRelease (nothing in between)
>> Uncontended with 10 workers: 218ns
>> Contended with 10 workers : 555 microseconds in one run 1.03ms in the
>> other
>>
>> Notice that the average is above q3 (0.57 quantile), indicating that it
>> is very
>> skewed, it is fast, but when it gets slow it becomes very slow. And this
>> is
>> precisely what I have seen with LWLock BufferMapping waits, they either
>> don't show up, or they take the cluster down (I am not a DBA, so it is
>> anecdotal
>> evidence).
>>
>>
>> Average uncontended hit and miss.
>> 2 workers, with lock (36, 38)
>> 10 workers, with lock (225,409)
>> 10 workers, without lock (156,252)
>>
>>
>>
>>  workers | op / wait  |   avg   |   q1    |   med   |   q3    | count
>> ---------+------------+---------+---------+---------+---------+--------
>>        2 | delete / 0 |   42.58 |   39.76 |   42.28 |   44.28 | 127999
>>        2 | delete / 1 | 5625.00 | 5625.00 | 5625.00 | 5625.00 |      1
>>        2 | hit / 0    |   36.01 |   33.86 |   35.81 |   37.77 | 128000
>>        2 | insert / 0 |   36.59 |   35.11 |   36.47 |   38.41 | 128000
>>        2 | LWLock / 0 |   35.59 |   33.23 |   35.17 |   37.14 | 128000
>>        2 | miss / 0   |   37.63 |   35.78 |   37.72 |   39.09 | 128000
>>
>>
>>
>>  workers | op / wait  |    avg     |    q1     |    med    |     q3     |
>> count
>>
>> ---------+------------+------------+-----------+-----------+------------+--------
>>       10 | delete / 0 |     792.11 |    166.58 |    225.58 |     277.75 |
>> 119522
>>       10 | delete / 1 | 1844238.60 |  45823.00 | 470479.00 | 2568042.25 |
>>    478
>>       10 | hit / 0    |     224.66 |     76.42 |    121.50 |     187.42 |
>> 120000
>>       10 | insert / 0 |     952.21 |    104.25 |    180.58 |     246.42 |
>> 119566
>>       10 | insert / 1 | 2154981.29 |  76708.00 | 703666.00 | 3334916.00 |
>>    434
>>       10 | LWLock / 0 |     218.06 |     69.33 |    104.17 |     152.67 |
>> 119987
>>       10 | LWLock / 1 | 1029929.62 | 126708.00 | 488459.00 |  836708.00 |
>>     13
>>       10 | miss / 0   |     408.87 |     76.42 |    156.08 |     184.00 |
>> 120000
>>
>>  workers | op / wait  |    avg     |    q1     |    med    |     q3     |
>> count
>>
>> ---------+------------+------------+-----------+-----------+------------+--------
>>       10 | delete / 0 |     628.94 |    166.58 |    236.08 |     291.85 |
>> 119595
>>       10 | delete / 1 | 2135859.85 |  80125.00 | 704750.00 | 3329688.00 |
>>    405
>>       10 | hit / 0    |     155.96 |     55.33 |    104.17 |     145.67 |
>> 120000
>>       10 | insert / 0 |     792.89 |    100.67 |    190.83 |     250.00 |
>> 119634
>>       10 | insert / 1 | 2272327.08 | 114083.00 | 666959.00 | 3580042.00 |
>>    366
>>       10 | LWLock / 0 |     305.68 |     69.50 |    107.58 |     159.75 |
>> 119993
>>       10 | LWLock / 1 |  555255.86 |  77437.50 | 390458.00 |  528979.50 |
>>      7
>>       10 | miss / 0   |     251.58 |     45.25 |     93.83 |     121.58 |
>> 120000
>>
>>
>> 1. With './configure'  '--prefix' ... '--without-icu'
>> '--without-readline' '--enable-tap-tests' --enable-cassert && make -j -s
>> clean && make -j -s && make check-world
>> 2. make -C src/test/recovery check PROVE_TESTS="t/027_stream_regress.pl"
>>
>> PS.: I nearly forgot to attach the patches 🤣
>>
>>

Reply via email to