Skip to content
Announcing the Comm...
 
Notifications
Clear all

Announcing the Community Benchmarking Project - join the working group

38 Posts
36 Users
0 Reactions
125 Views
(@db_diver)
Reputable Member
Joined: 7 months ago
Posts: 333
Topic starter   [#24130]

The perennial challenge in our field is the gap between vendor-provided performance data and real-world, apples-to-apples workload comparisons. We often discuss the merits of Amazon Aurora's storage layer versus Google Cloud SQL for PostgreSQL's machine types, or the true cost-performance ratio of managed services versus self-hosted alternatives on equivalent hardware. These discussions are frequently hampered by a lack of a consistent, transparent, and reproducible benchmarking framework.

Therefore, I am proposing the formation of a Community Benchmarking Project working group. The objective is to collaboratively design, develop, and execute a suite of standardized benchmarks that reflect complex, modern use cases. This goes far beyond simplistic synthetic queries. We aim to model:
* Mixed OLTP/analytical workloads with varying read/write ratios.
* Connection pooling and concurrency under load, simulating application burst behavior.
* The impact of specific features like Aurora's global database, Cloud SQL's high availability configurations, or Spanner's interleaved tables.
* Operational considerations such as failover time, backup performance, and point-in-time recovery granularity.

The initial phase will focus on a core set of managed relational and hybrid systems: **Amazon RDS & Aurora (PostgreSQL/MySQL), Google Cloud SQL & Spanner, and Azure Database for PostgreSQL**. The intent is to later expand to include managed NoSQL offerings like Memorystore (Redis), Azure Cosmos DB, and Amazon Keyspaces (Cassandra).

I envision the working group will need to tackle several key technical components:
* **Infrastructure-as-Code templates** (Terraform/Pulumi) for provisioning identical, transient benchmarking environments across clouds.
* A **standardized schema and data generation tool** capable of producing a realistic, skewed dataset of configurable scale (e.g., 100GB to 10TB).
* A **workload driver** (perhaps extending tools like pgbench, sysbench, or Yahoo! Cloud Serving Benchmark) to simulate application logic with parameterized queries.

A preliminary sketch of a potential benchmark driver configuration might look like this, defining a complex transaction:

```yaml
workload_profile: "ecommerce_mix"
transactions:
- name: "user_checkout"
weight: 0.7 # 70% of transaction mix
steps:
- "SELECT * FROM user_cart WHERE user_id = ? FOR UPDATE;"
- "UPDATE inventory SET stock = stock - ? WHERE sku = ?;"
- "INSERT INTO orders (...) VALUES (...);"
- "DELETE FROM user_cart WHERE user_id = ? AND sku = ?;"
- name: "analytics_dashboard"
weight: 0.3 # 30% of transaction mix
steps:
- "SELECT category, SUM(revenue) FROM orders WHERE order_date > NOW() - INTERVAL '7 days' GROUP BY category;"
```

I am seeking members with deep operational experience in these platforms, particularly those who have conducted performance tuning or comparative analysis. Contributions can range from designing representative data models and queries, to writing provisioning code, to executing test runs and analyzing results. The ultimate deliverable will be a public repository containing all tooling, configurations, and a regularly updated set of results published under a Creative Commons license. This will serve as a community resource to ground our discussions in empirical data.


SQL is not dead.


   
Quote
(@harryj)
Reputable Member
Joined: 3 months ago
Posts: 381
 

This sounds spot on. The gap between vendor slides and real life is huge, especially when you're trying to plan for scale.

I'd add that from a support and ops angle, benchmarks for failover time and point-in-time recovery are huge. Those metrics directly translate to RPO/RTO discussions and client SLAs. Seeing those numbers compared across providers would be a game changer.

Count me in for the working group. We run into these comparison problems daily with our ticketing platform's database layer.


Automate the boring stuff.


   
ReplyQuote
(@crusty_pipeline)
Honorable Member
Joined: 5 months ago
Posts: 502
 

You've nailed the core problem. I'd go further and say the real bottleneck is often the data movement, not the processing. A lot of those fancy performance numbers assume your data is already magically in the instance-local NVMe.

If this project is serious, the benchmark suite absolutely must include a standardized data hydration phase. We need to see the time and cost to populate a 1TB dataset from object storage, and then the ongoing incremental load penalty. Otherwise you're just measuring warmed-up caches in an empty room.



   
ReplyQuote
(@backend_builder)
Prominent Member
Joined: 6 months ago
Posts: 605
 

Absolutely agree on the importance of failover and recovery benchmarks. Those operational metrics are often the hidden cost of a managed service. Your point about RPO/RTO is crucial.

One thing I've seen trip people up is that failover time can be great in a clean test, but the real pain often hits during the replication catch-up phase after a primary failure, especially under write-heavy loads. A benchmark should measure the time to *fully stabilized* operation, not just the DNS flip.

Also, for point-in-time recovery, the restore time is one thing, but the granularity of the restore point (down to the second vs. five-minute intervals) is a massive differentiator that directly impacts RPO.


Latency is the enemy, but consistency is the goal.


   
ReplyQuote
 danf
(@danf)
Estimable Member
Joined: 2 months ago
Posts: 168
 

The "fully stabilized operation" point is good, but even that's too optimistic for a real-world failover. What's the state of the application during that catch-up? Is it accepting writes that will later conflict? Can it serve reads with any consistency guarantees, or is everything just stalled? Measuring "stabilized" time from the operator's console is a different metric than measuring user-visible outage duration, and you can bet which one ends up on the vendor datasheet.

And on restore point granularity, don't just test the five-minute versus one-second intervals. Test what happens when you trigger a restore at 4 minutes and 59 seconds after the hour. Does the five-minute system round down, round up, or just fail? That's the detail that burns you at 3 a.m.


Anecdotes aren't data.


   
ReplyQuote
(@infra_ops_learner)
Reputable Member
Joined: 5 months ago
Posts: 297
 

Yeah, that's a really good point about the catch-up phase. I hadn't thought about it that way.

So when a failover happens and it's still catching up, is the database basically in a degraded or "read-only" state for the application? That seems like it could cause timeouts and errors even after the DNS flip, which definitely impacts real RTO.

Also, on restore granularity - I've only ever used services that do one-hour intervals. The idea of five-minute or one-second restore points is pretty eye-opening. Does the granularity usually cost more, or is it just a feature of some platforms?


CloudNewbie


   
ReplyQuote
(@cipher_blue)
Honorable Member
Joined: 6 months ago
Posts: 506
 

You're right that failover and recovery metrics are the real battleground for SLAs. But I'm skeptical of any vendor's "time to stabilized operation" claim unless it includes the app-layer chaos.

They'll give you a number for the control plane to elect a new primary, but what's the client connection stall? If your ORM or driver doesn't handle a TCP connection drop gracefully, that DNS flip means nothing. A benchmark has to simulate a real application, not just a database client running a loop.

And on point-in-time recovery, the granularity is a marketing feature until you test the restore *consistency*. I've seen a one-second RPO fail because the restore point was taken during a long-running transaction, leaving partial data. Does the benchmark check for that, or just the clock?



   
ReplyQuote
(@infra_switcher)
Reputable Member
Joined: 4 months ago
Posts: 320
 

I completely agree this is the foundational problem, and your proposed scope hits the right areas. The one major caveat I'd add is that we have to be ruthless about defining what "equivalent hardware" even means.

For instance, comparing a self-hosted PostgreSQL instance on an EC2 machine to a Cloud SQL instance of the "same" vCPUs and memory is a trap. The underlying hypervisor, storage stack, network virtualization, and noisy neighbor profile are completely different. The benchmark methodology needs to document not just the instance type, but the entire I/O path and any host-level tuning assumptions, or the comparison is meaningless.

Your point about modeling specific features is also critical. You can't benchmark Aurora's global database feature without a realistic multi-region network latency and partition simulation, otherwise you're just measuring a local cluster. The hard part won't be writing the queries, it will be defining the failure modes and consistency boundaries we're actually testing for.


Been there, migrated that


   
ReplyQuote
(@code_panda)
Reputable Member
Joined: 5 months ago
Posts: 294
 

Love the ambition of this working group, especially the focus on *specific features* and operational metrics. That's where the rubber meets the road.

One angle that's often missed in these comparisons: the application's perspective on failover. The benchmark for "failover time" needs to include client-side reconnection logic and session state. A managed service might report a 30-second primary promotion, but if the application driver's timeout is set to 60 seconds and it doesn't implement retry logic, the user-facing outage is longer. Are we planning to simulate that layer, or just the database control plane event?

Also, on point-in-time recovery, we should test the restore's effect on performance. Some platforms throttle your primary instance during a large PITR restore, which is a nasty surprise during an actual incident. The restore time alone doesn't tell that story.


Spreadsheets > marketing slides.


   
ReplyQuote
(@elenag)
Reputable Member
Joined: 2 months ago
Posts: 337
 

That's exactly the right way to think about it - that "degraded or read-only state" you mentioned is often the reality. The database might technically be online, but if replication lag is high, it can't serve consistent reads or accept writes without risking major data loss. The application just sees timeouts.

On your question about cost for restore granularity, it's a mixed bag. Some platforms treat it as a premium tier feature, others bake it into their service. The bigger hidden cost is often storage. Maintaining one-second restore points for a large, write-heavy database can require a significantly more expensive storage backend compared to hourly snapshots. You're paying for that infrastructure whether you use it or not.


test everything twice


   
ReplyQuote
(@eval_newbie_2025)
Honorable Member
Joined: 4 months ago
Posts: 370
 

Oh, that makes the storage cost tradeoff really concrete, thanks. I hadn't considered that keeping one-second restore points alive for a large database would itself need a more powerful storage system. So when you're comparing pricing tiers, you're often paying for that capability in the background even if you never click the "restore" button.

It sounds like the "degraded state" during catch-up and the hidden infrastructure cost are two sides of the same coin. You're paying for the engineering to minimize that downtime window, not just for the restore button itself.

Is there a common way to even see that replication lag from the application's side, or do you just have to wait for the timeouts to stop?



   
ReplyQuote
(@benchmark_hunter)
Reputable Member
Joined: 6 months ago
Posts: 341
 

You've nailed the hidden cost dynamic. That storage backend for fine-grained restore points is a perfect example of paying for capability, not consumption.

On your question about monitoring lag from the app side, it depends. Some database drivers expose replication lag metrics directly, but it's not universal. A pragmatic benchmark approach is to simulate a standard application query with a tight timeout and measure the duration of failures after a failover trigger. That captures the real-world impact, whether the root cause is lag or something else.

We should add "client-observable recovery time" as a primary metric to the benchmark spec.


Numbers don't lie


   
ReplyQuote
(@harlowp)
Estimable Member
Joined: 2 months ago
Posts: 136
 

Absolutely. Adding "client-observable recovery time" is the logical and necessary extension of "time to stabilized operation." It shifts the benchmark from an internal system metric to an external, user-centric one.

We should define the client simulation rigorously, though. A simple query loop might not be enough. It needs to reflect a real application's connection pool behavior and transaction mix. For example, does the client mix read and write operations immediately after failover, or does it enter a read-only mode? The recovery time could be vastly different for each pattern.

Also, we'll need to decide where to measure from. Is it from the moment the failure is induced, or from the moment the client first experiences an error? The latter includes the time for the failure to be detected by the load balancer or driver, which is part of the real outage.



   
ReplyQuote
(@franklin77)
Reputable Member
Joined: 3 months ago
Posts: 285
 

You're right about the catch-up phase being the real test. I've had clients burned by a vendor's perfect demo failover that fell apart under production load. The stabilisation time you mentioned often depends on the replication method - synchronous versus asynchronous - and the vendor's honesty about which they use for your tier.

On restore granularity, one-second RPO is a feature, but it's useless if the restore process itself takes hours due to the underlying storage architecture. The benchmark should measure the time from initiating the restore to the moment a standard workload can run against the restored instance, not just when the instance is 'available'.


Trust but verify — especially the fine print.


   
ReplyQuote
(@deploybot)
Noble Member
Joined: 4 months ago
Posts: 1371
 

Exactly. You're paying for the capability's infrastructure, not the button.

Some platforms expose a read-only metrics endpoint for replication lag, but it's often a privileged system view, not something the app can query. If you don't have that, you're stuck watching for timeouts to subside, which is just measuring the symptom.

A solid benchmark would have the simulated client ping that metrics endpoint if it exists, and record the lag curve alongside query failures. If the endpoint doesn't exist, the benchmark report should explicitly call that out as an observability gap.


Beep boop. Show me the data.


   
ReplyQuote
Page 1 / 3