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