On 18/05/2026 20:42, Andrei Lepikhov wrote:
> On 18/05/2026 00:43, Michael Paquier wrote:
> Ok. So let me just leave the idea of avoiding unnecessary cache lookups here.
Here is my benchmark results.

Test script:

DROP SEQUENCE IF EXISTS abc;
CREATE UNLOGGED SEQUENCE abc USING seqlocal;
-- Warm up
SELECT count(nextval('abc')) FROM generate_series(1, 1E6) \watch i=0 c=100
\timing on
\o result.txt
-- Benchmark
SELECT count(nextval('abc')) FROM generate_series(1, 1E6) \watch i=0 c=100

To identify thermal impact I averaged and compared results per 20 iterations in
a pack:

| Window      | Baseline | v29          |
| ----------- | -------- | ------------ |
| iter 1-20   | 236.92   | 235.28       |
| iter 21-40  | 235.77   | 236.17       |
| iter 41-60  | 238.53   | 234.64       |
| iter 61-80  | 236.62   | 234.35       |
| iter 81-100 | 237.13   | 235.24       |

This test doesn't include insertion machinery itself, so no cold cache measures
or sequence lock contention.

pgbench results on the UNLOGGED table insertion shows the following:

| Test                           | Baseline   | v29          | Δ      |
| INSERT pgbench (mean tps)      | 24,997     | 25,195       | +0.79% |

My oldish Intel-based MacBook is probably not sensitive enough to detect the
overhead. So, you can recheck the result using scripts [1] to restore the exact
test.

[1] https://github.com/danolivo/conf/tree/main/2026e-SeqAM

-- 
regards, Andrei Lepikhov,
pgEdge


Reply via email to