šŸ”„ The DB Grill šŸ”„

Where database blog posts get flame-broiled to perfection

CPU-bound Insert Benchmark vs Postgres on 24-core and 32-core servers
Originally from smalldatum.blogspot.com/feeds/posts/default
January 22, 2026 • Roasted by Alex "Downtime" Rodriguez Read Original Article

Alright, let's pour some lukewarm coffee and take a look at this. Oh, fantastic. Another academic paper disguised as a blog post, proving with scientific certainty that after six major versions and countless hours of engineering, we've achieved... "small improvements."

This is exactly the kind of report that gets forwarded to me by a product manager at 4 PM on a Friday with the subject line, "FYI - Looks promising for the Q3 upgrade! :)" And I'm supposed to be thrilled that Postgres 18, compared to a version from half a decade ago, manages to eke out a 2% gain in a synthetic benchmark that has absolutely zero resemblance to our actual production workload.

Let's just admire the clinical beauty of this setup. Freshly compiled binaries, pristine servers with Hyper-Threading and SMT disabled—because God forbid our CPUs actually do the job they were designed for—running on a single NVMe drive. A completely sterile lab environment, of course. It's the database equivalent of testing a Formula 1 car on a perfectly straight, infinitely long road and then telling me it'll handle rush hour traffic in the rain just fine.

And the benchmark steps... l.i0, l.x, l.i1. It reads like an IKEA assembly manual for a machine that manufactures pain. My favorite part is the casual mention of what these steps actually represent:

The second does does 100 inserts/s and the third does 100 deletes/s. The second and third are less busy than the first.

Oh, is that how it works? A gentle, predictable stream of background writes? In my world, qr500 isn't a test step; it's what happens when the marketing team launches a surprise flash sale and a legacy data pipeline decides to re-sync three years of user history at the exact same time. The "less busy" connections are the ones desperately trying to process payments while the whole thing is on fire.

But this is where the real poetry is. The "bad news" section.

"Variance." "Write-stalls." Such polite, academic terms for what we in the trenches call "getting paged at 3 AM on New Year's Day." You see "variance," I see the P99 latency graph looking like a seismograph during an earthquake. You see a "write-stall," I see a 90-second transaction timeout that cascades through six microservices and triggers a circuit breaker that takes the whole checkout system offline.

And this gem: "the overhead from get_actual_variable_range increased by 10% from Postgres 14 to 18." I can see the post-mortem now. "What was the root cause of the multi-million dollar outage?" Well, it turns out an obscure internal function, which nobody on our team has ever heard of, got a little bit chonky over the last four years. The monitoring we had? It just showed "CPU on fire." Why? Because nobody thinks to build a dashboard for get_actual_variable_range performance until it's already burned the whole village down. We're promised revolutionary new I/O methods like io_uring, but the thing that's going to kill us is always some subtle, creeping regression in the fine print.

You know what this report tells me? It tells me that for the low, low price of a "zero-downtime" migration that will absolutely not be zero-downtime, we can upgrade from a system we vaguely understand to one with new, exciting, and completely undocumented failure modes. We'll get a 2% theoretical performance gain on a workload we don't have, and in exchange, we'll get a brand new set of "variances" and "stalls" to discover during our peak holiday shopping season.

I've got a drawer full of vendor stickers. CockroachDB, RethinkDB, FoundationDB... all of them came with reports just like this. Charts full of blue bars going up and to the right, promising to solve all our problems. Now they're just little tombstones on my old laptop, reminders of promises that shattered the first time they met a real, chaotic production environment.

So yeah, thanks for the benchmark. I'll file it away. And when management decides we have to upgrade to Postgres 18 for that "strategic performance uplift," I'll just clear my calendar for the following holiday weekend. I already know what's going to happen. The autovacuum is going to kick in at the worst possible moment, fight with that new 10% overhead, and the whole thing will grind to a halt. The "SLA failure" won't be a yellow cell in a spreadsheet; it'll be my phone vibrating off the nightstand.

...another couple of percentage points. Whoop-de-doo. I need more coffee.