MySQL Ecosystem Performance Benchmark Report 2026
Comparative Analysis of InnoDB-Compatible Engines — Percona Lab Results
Table of Contents
Executive Summary
This report presents results from a comprehensive sysbench OLTP benchmark comparing 10 InnoDB-compatible database engine versions across three generations of MariaDB, MySQL, and Percona Server. Tests span three buffer pool tiers (2 GB, 12 GB, 32 GB), eight concurrency levels (1 to 512 threads), and three test scenarios — read-write local, read-only local, and read-write over a 10Gb/s network — yielding 700+ data points.
1. Benchmark Overview
1.1 Purpose and Scope
This benchmark was designed to provide vendor-neutral, reproducible performance data for MySQL-compatible open-source database engines. The goal is to quantify how each engine scales under OLTP read-write and read-only workloads at varying levels of concurrency and memory pressure — three dimensions that are critical for production capacity planning.
The study addresses the following primary questions:
- How does raw throughput (TPS) scale with thread count for each engine?
- What is the impact of InnoDB buffer pool size on throughput?
- How do different versions within the same family compare?
- Where is the concurrency saturation point reached?
- How do local runs differ from high-speed (10Gb/s) network data transfer?
1.2 Engines Under Test
Ten distinct engine versions were benchmarked, spanning three product families:
| Engine Family | Version | Branch / LTS Status |
|---|---|---|
| MariaDB | 10.11.16 | LTS |
| MariaDB | 11.4.10 | Stable release |
| MariaDB | 12.1.2 | Development release |
| MySQL | 5.7.44 | EOL / legacy |
| MySQL | 8.0.45 | Active stable |
| MySQL | 8.4.8 | LTS |
| MySQL | 9.6.0 | Innovation Release |
| Percona Server | 5.7.44-48 | EOL / legacy |
| Percona Server | 8.0.45-36 | Active stable |
| Percona Server | 8.4.7-7 | LTS |
2. Test Environment & Infrastructure
2.1 Hardware & Host Configuration
All benchmarks were executed on a single bare-metal host to eliminate network and virtualization overhead. The database server and benchmark client ran on the same machine (loopback connection) for local tests, and on separate machines connected via 10Gb/s Ethernet for network tests. The host was provisioned fresh before each engine run.
| Component | Specification |
|---|---|
| OS | Ubuntu 22.04 LTS / 24.04 LTS (matched to image) |
| Container runtime | Docker (–network host, –user mysql) |
| Benchmark tool | sysbench 1.0.20 with LuaJIT 2.1.0-beta3 |
| Client connection | 127.0.0.1 loopback (local) / 10Gb/s Ethernet (network) |
| MySQL client | mysql-client (for version detection and config verification) |
| Telemetry | iostat, vmstat, mpstat, dstat (1-second interval during each run) |
2.2 Containerization Strategy
Each engine was run as a Docker container using official images (percona/percona-server, mariadb, mysql). The host network mode was used to avoid bridge networking overhead. A fresh container was started for each engine/tier combination using the following sequence:
- Stop and remove any existing benchmark container
- Detect actual server version by connecting and running
SELECT VERSION() - Generate a version-specific configuration file (see Section 3)
- Restart the container with the new configuration mounted
- Wait for the server to become ready (
mysqladmin/mariadb-adminping loop) - Verify InnoDB buffer pool size matches the intended tier (hard abort on mismatch)
2.3 Buffer Pool Tiers
Three InnoDB buffer pool sizes were tested, each representing a distinct workload characteristic:
| Tier | innodb_buffer_pool_size | Workload Character |
|---|---|---|
| 2 GB | 2 GB | I/O bound — dataset substantially exceeds buffer pool; heavy read amplification |
| 12 GB | 12 GB | Mixed — partial dataset fits in memory; realistic production scenario |
| 32 GB | 32 GB | In-memory — full working set fits; CPU and locking are primary bottlenecks |
3. Database Configuration
The schema dump can be downloaded from the interactive graphs page or directly at percona-lab-results.github.io/2026-interactive-metrics/schema_dump.sql.
3.1 Shared Base Configuration
A common configuration was applied to all engines to ensure fairness. Version-specific directives were layered on top (see 3.2).
| Parameter | Value | Rationale |
|---|---|---|
| innodb_buffer_pool_size | Tier-specific | Core variable — 2G / 12G / 32G per tier |
| innodb_buffer_pool_instances | 1 or 8 | 1 for <8 GB, 8 for ≥8 GB |
| max_connections | 4096 | Headroom above max 512 test threads |
| max_prepared_stmt_count | 1,000,000 | Prevents exhaustion under sysbench |
| innodb_io_capacity | 2500 | Typical NVMe baseline flush capacity |
| innodb_io_capacity_max | 5000 | Burst I/O ceiling |
| table_open_cache | 200,000 | Avoids cache thrash |
| table_open_cache_instances | 64 | Reduces mutex contention |
| character_set_server | utf8mb4 | Consistent charset across all versions |
| innodb_doublewrite | 1 | Data corruption prevention |
| innodb_flush_log_at_trx_commit | 1 | Full ACID compliance |
| innodb_flush_method | O_DIRECT | Bypass system cache |
| innodb_log_buffer_size | 64M | Staging area for redo log writes |
| sync_binlog | 1 | Flush binlog per transaction |
| binlog_format | ROW | Record row-level changes |
| binlog_row_image | MINIMAL | Only changed columns and PKs |
3.2 Version-Specific Configuration
Configurations were branched based on detected major version:
MySQL / Percona 5.7: innodb_log_file_size=2G, innodb_log_files_in_group=2, query_cache_type=0, query_cache_size=0, innodb_checksum_algorithm=crc32
MySQL / Percona 8.0: innodb_log_file_size=2G, innodb_log_files_in_group=2, innodb_change_buffering=none (query cache removed in 8.0)
MySQL 8.4 / 9.x: innodb_redo_log_capacity=4G, innodb_change_buffering=none (new redo log architecture)
MariaDB < 12.1: innodb_log_file_size=2G, innodb_log_files_in_group=2, query_cache_type=0, query_cache_size=0, thread_handling=one-thread-per-connection
MariaDB 12.1+: Same as above minus query_cache directives (removed in 12.1)
4. Benchmark Workload
4.1 Warmup Protocol
| Phase | Duration | Purpose |
|---|---|---|
| Warmup A — Read-Only | 180 s (3 min) | Populate buffer pool with hot pages |
| Warmup B — Read-Write | 600 s (10 min) | Steady-state redo log & dirty page ratio (skipped for RO) |
4.2 Measurement Run
Each measurement run lasted 900 seconds (15 minutes) with results reported at 1-second intervals. System telemetry (iostat, vmstat, mpstat, dstat) was collected concurrently.
5. Metrics & Reporting
5.1 Primary Metrics
| Metric | Definition |
|---|---|
| TPS | Transactions per second (complete BEGIN/COMMIT cycles) |
| QPS | Queries per second (≈20× TPS for this workload) |
| P95 Latency (ms) | 95th-percentile transaction response time |
| Avg Latency (ms) | Mean transaction latency |
| Max Latency (ms) | Worst single transaction latency observed |
5.2 Derived Metrics
QPS/TPS gain relative to additional RAM; QPS/TPS gain relative to thread count increase.
5.3 Output Files
Each run produced: .sysbench.txt, .iostat.txt, .vmstat.txt, .mpstat.txt, .dstat.txt. Each server config produced: .cnf.txt, .vars.txt, .status.txt, pt-mysql-summary.txt.
6. Results: Read-Write Local
The read-write local benchmark tests mixed OLTP transactions over loopback connection. → Open interactive graph
Table 6.1.1 — TPS by Thread Count, 32 GB Buffer Pool (Read-Write, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 517 | 1,574 | 3,749 | 5,844 | 8,298 | 10,694 | 5,973 | 3,921 |
| MariaDB 11.4 | 412 | 1,418 | 3,364 | 5,348 | 7,869 | 10,232 | 5,330 | 3,318 |
| MariaDB 12.1 | 419 | 1,432 | 3,363 | 5,395 | 7,861 | 10,273 | 5,372 | 3,430 |
| MySQL 5.7 | 368 | 1,312 | 3,540 | 5,519 | 7,338 | 7,281 | 5,553 | 3,144 |
| MySQL 8.0 | 384 | 1,191 | 3,274 | 5,640 | 8,587 | 9,509 | 10,066 | 9,522 |
| MySQL 8.4 | 370 | 1,097 | 2,903 | 4,883 | 7,324 | 10,193 | 11,889 | 13,325 |
| MySQL 9.6 | 371 | 1,081 | 2,859 | 4,788 | 7,252 | 9,885 | 11,631 | 13,178 |
| Percona 5.7 | 368 | 1,321 | 3,427 | 5,384 | 7,772 | 9,700 | 10,673 | 11,105 |
| Percona 8.0 | 380 | 1,181 | 3,348 | 5,620 | 8,670 | 9,393 | 9,663 | 9,447 |
| Percona 8.4 | 377 | 1,139 | 2,982 | 5,007 | 7,641 | 10,260 | 12,044 | 13,385 |
At 32 GB, MySQL 8.4 and Percona 8.4 demonstrate exceptional high-concurrency scaling through 512 threads (13,325 and 13,385 TPS). MariaDB engines peak at 128 threads then degrade sharply. MySQL 5.7 peaks early at 64 threads.
Table 6.1.2 — TPS by Thread Count, 12 GB Buffer Pool (Read-Write, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 178 | 393 | 632 | 810 | 1,068 | 1,231 | 998 | 551 |
| MariaDB 11.4 | 166 | 379 | 632 | 806 | 1,062 | 1,212 | 1,027 | 598 |
| MariaDB 12.1 | 168 | 376 | 627 | 805 | 1,062 | 1,216 | 1,040 | 611 |
| MySQL 5.7 | 144 | 352 | 592 | 750 | 783 | 784 | 799 | 784 |
| MySQL 8.0 | 132 | 295 | 508 | 653 | 832 | 937 | 1,020 | 1,144 |
| MySQL 8.4 | 142 | 315 | 587 | 780 | 900 | 983 | 972 | 973 |
| MySQL 9.6 | 140 | 315 | 583 | 770 | 904 | 986 | 969 | 978 |
| Percona 5.7 | 151 | 363 | 640 | 835 | 1,034 | 1,203 | 1,340 | 1,385 |
| Percona 8.0 | 143 | 294 | 470 | 519 | 576 | 653 | 689 | 774 |
| Percona 8.4 | 140 | 324 | 594 | 776 | 905 | 982 | 997 | 1,035 |
At 12 GB, Percona 5.7 leads with 1,385 TPS at 512 threads. MariaDB engines peak around 128 threads. MySQL 8.0 uniquely continues improving to 1,144 TPS at 512 threads.
Table 6.1.3 — TPS by Thread Count, 2 GB Buffer Pool (Read-Write, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 98 | 252 | 374 | 468 | 584 | 666 | 587 | 257 |
| MariaDB 11.4 | 110 | 250 | 376 | 492 | 614 | 661 | 535 | 248 |
| MariaDB 12.1 | 97 | 249 | 371 | 472 | 614 | 659 | 531 | 248 |
| MySQL 5.7 | 85 | 246 | 404 | 476 | 529 | 570 | 574 | 257 |
| MySQL 8.0 | 55 | 183 | 311 | 419 | 533 | 576 | 639 | 524 |
| MySQL 8.4 | 69 | 190 | 346 | 463 | 531 | 502 | 521 | 496 |
| MySQL 9.6 | 68 | 192 | 346 | 464 | 530 | 511 | 525 | 498 |
| Percona 5.7 | 81 | 238 | 386 | 507 | 631 | 724 | 772 | 813 |
| Percona 8.0 | 73 | 185 | 313 | 369 | 398 | 439 | 462 | 430 |
| Percona 8.4 | 66 | 191 | 352 | 461 | 535 | 510 | 519 | 494 |
Under severe memory pressure (2 GB), Percona 5.7 dominates at 813 TPS (512 threads). The 8.4-generation engines plateau around 530 TPS. Percona 8.0 shows the worst overall performance at this tier.
Table 6.1.4 — MariaDB Version Progression (32 GB, RW, Local) — baseline: MariaDB 10.11
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 (TPS) | 517 | 1,574 | 3,749 | 5,844 | 8,298 | 10,694 | 5,973 | 3,921 |
| MariaDB 11.4 (TPS) | 412 | 1,418 | 3,364 | 5,348 | 7,869 | 10,232 | 5,330 | 3,318 |
| vs MariaDB 10.11 | -20.2% | -9.9% | -10.3% | -8.5% | -5.2% | -4.3% | -10.8% | -15.4% |
| MariaDB 12.1 (TPS) | 419 | 1,432 | 3,363 | 5,395 | 7,861 | 10,273 | 5,372 | 3,430 |
| vs MariaDB 10.11 | -18.8% | -9.0% | -10.3% | -7.7% | -5.3% | -3.9% | -10.1% | -12.5% |
MariaDB (baseline 10.11): Both 11.4 and 12.1 show broad regressions across nearly all concurrency levels. Single-thread performance drops ~20% and the degradation persists through 64t (~5%), 256t (~10%), and 512t (~13–15%). Only the 128-thread peak remains within the 5% threshold.
Table 6.1.5 — MySQL Version Progression (32 GB, RW, Local) — baseline: MySQL 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MySQL 5.7 (TPS) | 368 | 1,312 | 3,540 | 5,519 | 7,338 | 7,281 | 5,553 | 3,144 |
| MySQL 8.0 (TPS) | 384 | 1,191 | 3,274 | 5,640 | 8,587 | 9,509 | 10,066 | 9,522 |
| vs MySQL 5.7 | +4.2% | -9.3% | -7.5% | +2.2% | +17.0% | +30.6% | +81.3% | +202.9% |
| MySQL 8.4 (TPS) | 370 | 1,097 | 2,903 | 4,883 | 7,324 | 10,193 | 11,889 | 13,325 |
| vs MySQL 5.7 | +0.4% | -16.4% | -18.0% | -11.5% | -0.2% | +40.0% | +114.1% | +323.9% |
| MySQL 9.6 (TPS) | 371 | 1,081 | 2,859 | 4,788 | 7,252 | 9,885 | 11,631 | 13,178 |
| vs MySQL 5.7 | +0.7% | -17.6% | -19.2% | -13.2% | -1.2% | +35.8% | +109.4% | +319.2% |
MySQL (baseline 5.7): Regressions are confined to low concurrency. MySQL 8.0 dips at 4t (−9%) and 16t (−8%). MySQL 8.4 and 9.6 show steeper early regressions at 4t (−16–18%) and 16t (−18–19%), recovering strongly above 64 threads where the 8.4 generation continues scaling past all other versions.
Table 6.1.6 — Percona Version Progression (32 GB, RW, Local) — baseline: Percona 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| Percona 5.7 (TPS) | 368 | 1,321 | 3,427 | 5,384 | 7,772 | 9,700 | 10,673 | 11,105 |
| Percona 8.0 (TPS) | 380 | 1,181 | 3,348 | 5,620 | 8,670 | 9,393 | 9,663 | 9,447 |
| vs Percona 5.7 | +3.4% | -10.6% | -2.3% | +4.4% | +11.5% | -3.2% | -9.5% | -14.9% |
| Percona 8.4 (TPS) | 377 | 1,139 | 2,982 | 5,007 | 7,641 | 10,260 | 12,044 | 13,385 |
| vs Percona 5.7 | +2.5% | -13.8% | -13.0% | -7.0% | -1.7% | +5.8% | +12.8% | +20.5% |
Percona (baseline 5.7): Percona 8.0 regresses at 4t (−11%), 256t (−10%), and 512t (−15%). Percona 8.4 regresses at 4t (−14%), 16t (−13%), and 32t (−7%), then surpasses 5.7 sharply above 64 threads, ultimately delivering the highest peak TPS in the dataset.
7. Results: Read-Only Local
The read-only benchmark eliminates write contention, revealing pure read-path scalability. → Open interactive graph
Table 6.2.1 — TPS by Thread Count, 32 GB Buffer Pool (Read-Only, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 962 | 3,667 | 12,220 | 20,211 | 25,820 | 32,392 | 31,111 | 29,542 |
| MariaDB 11.4 | 746 | 2,812 | 9,495 | 15,122 | 19,223 | 23,357 | 22,532 | 21,580 |
| MariaDB 12.1 | 749 | 2,946 | 9,790 | 15,499 | 19,759 | 24,108 | 23,234 | 22,174 |
| MySQL 5.7 | 642 | 2,645 | 8,855 | 13,684 | 13,113 | 11,810 | 6,976 | 3,889 |
| MySQL 8.0 | 720 | 2,945 | 9,659 | 15,255 | 19,141 | 22,400 | 21,471 | 20,586 |
| MySQL 8.4 | 740 | 2,830 | 9,522 | 15,121 | 19,278 | 23,414 | 22,400 | 20,989 |
| MySQL 9.6 | 748 | 2,837 | 9,597 | 15,130 | 19,245 | 23,060 | 21,980 | 20,597 |
| Percona 5.7 | 644 | 2,627 | 8,707 | 14,363 | 18,588 | 22,546 | 21,656 | 20,838 |
| Percona 8.0 | 714 | 2,944 | 9,724 | 14,966 | 18,394 | 21,647 | 20,519 | 20,020 |
| Percona 8.4 | 739 | 2,818 | 9,571 | 15,170 | 19,215 | 23,263 | 22,228 | 20,914 |
MariaDB 10.11 dominates with 32,392 TPS at 128 threads — 38% ahead of the next engine. MySQL 5.7 peaks at 13,684 TPS (32 threads) then collapses to 3,889 at 512 threads.
Table 6.2.2 — TPS by Thread Count, 12 GB Buffer Pool (Read-Only, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 305 | 980 | 2,711 | 3,466 | 3,517 | 3,538 | 3,511 | 3,537 |
| MariaDB 11.4 | 268 | 879 | 2,590 | 3,457 | 3,536 | 3,562 | 3,564 | 3,607 |
| MariaDB 12.1 | 274 | 908 | 2,597 | 3,459 | 3,515 | 3,537 | 3,530 | 3,531 |
| MySQL 5.7 | 226 | 770 | 2,095 | 2,619 | 2,635 | 2,584 | 2,518 | 2,460 |
| MySQL 8.0 | 237 | 874 | 2,570 | 3,416 | 3,478 | 3,512 | 3,497 | 3,511 |
| MySQL 8.4 | 263 | 887 | 2,647 | 3,558 | 3,638 | 3,642 | 3,636 | 3,670 |
| MySQL 9.6 | 261 | 907 | 2,649 | 3,557 | 3,595 | 3,620 | 3,631 | 3,631 |
| Percona 5.7 | 238 | 847 | 2,480 | 3,385 | 3,421 | 3,437 | 3,440 | 3,442 |
| Percona 8.0 | 249 | 858 | 2,575 | 3,423 | 3,498 | 3,537 | 3,543 | 3,516 |
| Percona 8.4 | 263 | 872 | 2,646 | 3,556 | 3,620 | 3,634 | 3,624 | 3,621 |
All engines converge into a tighter band. MySQL 8.4 and 9.6 lead at ~3,670 TPS. MySQL 5.7 shows a flat curve above 32 threads (~2,600 TPS).
Table 6.2.3 — TPS by Thread Count, 2 GB Buffer Pool (Read-Only, Local)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 188 | 520 | 1,390 | 1,668 | 1,691 | 1,696 | 1,704 | 1,691 |
| MariaDB 11.4 | 177 | 524 | 1,368 | 1,664 | 1,694 | 1,697 | 1,708 | 1,732 |
| MariaDB 12.1 | 175 | 516 | 1,367 | 1,673 | 1,726 | 1,740 | 1,753 | 1,741 |
| MySQL 5.7 | 159 | 490 | 1,358 | 1,675 | 1,717 | 1,728 | 1,718 | 1,722 |
| MySQL 8.0 | 158 | 520 | 1,401 | 1,686 | 1,712 | 1,725 | 1,716 | 580 |
| MySQL 8.4 | 166 | 504 | 1,372 | 1,680 | 1,694 | 1,717 | 1,547 | 457 |
| MySQL 9.6 | 166 | 489 | 1,372 | 1,676 | 1,701 | 1,711 | 1,377 | 440 |
| Percona 5.7 | 165 | 480 | 1,361 | 1,683 | 1,692 | 1,694 | 1,701 | 1,702 |
| Percona 8.0 | 155 | 504 | 1,401 | 1,691 | 1,721 | 1,748 | 1,733 | 1,728 |
| Percona 8.4 | 165 | 483 | 1,375 | 1,682 | 1,712 | 1,719 | 884 | 428 |
Read-only workloads saturate early. MariaDB 12.1 leads slightly at 1,753 TPS. MySQL 9.6 and Percona 8.4 degrade sharply above 128 threads.
Table 6.2.4 — MariaDB Version Progression (32 GB, RO, Local) — baseline: MariaDB 10.11
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 (TPS) | 962 | 3,667 | 12,220 | 20,211 | 25,820 | 32,392 | 31,111 | 29,542 |
| MariaDB 11.4 (TPS) | 746 | 2,812 | 9,495 | 15,122 | 19,223 | 23,357 | 22,532 | 21,580 |
| vs MariaDB 10.11 | -22.5% | -23.3% | -22.3% | -25.2% | -25.6% | -27.9% | -27.6% | -27.0% |
| MariaDB 12.1 (TPS) | 749 | 2,946 | 9,790 | 15,499 | 19,759 | 24,108 | 23,234 | 22,174 |
| vs MariaDB 10.11 | -22.2% | -19.7% | -19.9% | -23.3% | -23.5% | -25.6% | -25.3% | -24.9% |
MariaDB (baseline 10.11): The most severe regressions in the dataset. Every thread count for both 11.4 and 12.1 degrades by 20–28%, with no concurrency level staying within the 5% threshold. The read-only path is clearly significantly worse in 11.4+, suggesting substantial changes to the read-path internals.
Table 6.2.5 — MySQL Version Progression (32 GB, RO, Local) — baseline: MySQL 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MySQL 5.7 (TPS) | 642 | 2,645 | 8,855 | 13,684 | 13,113 | 11,810 | 6,976 | 3,889 |
| MySQL 8.0 (TPS) | 720 | 2,945 | 9,659 | 15,255 | 19,141 | 22,400 | 21,471 | 20,586 |
| vs MySQL 5.7 | +12.1% | +11.3% | +9.1% | +11.5% | +46.0% | +89.7% | +207.8% | +429.3% |
| MySQL 8.4 (TPS) | 740 | 2,830 | 9,522 | 15,121 | 19,278 | 23,414 | 22,400 | 20,989 |
| vs MySQL 5.7 | +15.2% | +7.0% | +7.5% | +10.5% | +47.0% | +98.3% | +221.1% | +439.6% |
| MySQL 9.6 (TPS) | 748 | 2,837 | 9,597 | 15,130 | 19,245 | 23,060 | 21,980 | 20,597 |
| vs MySQL 5.7 | +16.4% | +7.3% | +8.4% | +10.6% | +46.8% | +95.3% | +215.1% | +429.6% |
MySQL (baseline 5.7): No regressions ≥5% in read-only mode. All 8.x versions improve over 5.7 at every thread count, with 8.0, 8.4, and 9.6 pulling ahead strongly above 32 threads.
Table 6.2.6 — Percona Version Progression (32 GB, RO, Local) — baseline: Percona 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| Percona 5.7 (TPS) | 644 | 2,627 | 8,707 | 14,363 | 18,588 | 22,546 | 21,656 | 20,838 |
| Percona 8.0 (TPS) | 714 | 2,944 | 9,724 | 14,966 | 18,394 | 21,647 | 20,519 | 20,020 |
| vs Percona 5.7 | +10.9% | +12.1% | +11.7% | +4.2% | -1.0% | -4.0% | -5.3% | -3.9% |
| Percona 8.4 (TPS) | 739 | 2,818 | 9,571 | 15,170 | 19,215 | 23,263 | 22,228 | 20,914 |
| vs Percona 5.7 | +14.7% | +7.3% | +9.9% | +5.6% | +3.4% | +3.2% | +2.6% | +0.4% |
Percona (baseline 5.7): Percona 8.0 just crosses the threshold at 256t (−5.3%). Percona 8.4 shows no regressions ≥5% in read-only mode and tracks closely with MySQL 8.4 throughout.
8. Results: Read-Write Network
The network benchmark measures read-write OLTP over 10Gb/s Ethernet. → Open interactive graph
Table 6.3.1 — TPS by Thread Count, 32 GB Buffer Pool (Read-Write, Network)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 337 | 1,204 | 3,417 | 5,355 | 7,812 | 10,050 | 8,570 | 4,088 |
| MariaDB 11.4 | 288 | 1,043 | 3,008 | 4,604 | 7,090 | 9,512 | 6,581 | 3,489 |
| MariaDB 12.1 | 292 | 1,056 | 3,009 | 4,812 | 7,187 | 9,599 | 6,838 | 3,652 |
| MySQL 5.7 | 262 | 1,020 | 2,957 | 4,849 | 6,822 | 7,146 | 5,838 | 3,346 |
| MySQL 8.0 | 265 | 949 | 2,824 | 4,829 | 7,787 | 9,125 | 9,736 | 9,479 |
| MySQL 8.4 | 258 | 911 | 2,571 | 4,322 | 6,605 | 9,408 | 11,279 | 12,781 |
| MySQL 9.6 | 256 | 904 | 2,560 | 4,262 | 6,489 | 9,173 | 10,989 | 12,715 |
| Percona 5.7 | 269 | 1,059 | 3,082 | 4,713 | 6,733 | 8,585 | 9,939 | 10,863 |
| Percona 8.0 | 267 | 984 | 2,994 | 5,054 | 7,826 | 8,919 | 9,546 | 9,231 |
| Percona 8.4 | 257 | 921 | 2,725 | 4,454 | 6,692 | 9,379 | 11,250 | 13,076 |
MySQL 8.4/9.6 and Percona 8.4 reach 12,781, 12,715, and 13,076 TPS at 512 threads. MariaDB 10.11 peaks at 10,050 (128 threads) but degrades to 4,088 at 512.
Table 6.3.2 — TPS by Thread Count, 12 GB Buffer Pool (Read-Write, Network)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 146 | 384 | 639 | 824 | 1,128 | 1,284 | 1,007 | 531 |
| MariaDB 11.4 | 132 | 371 | 620 | 794 | 1,105 | 1,238 | 1,024 | 567 |
| MariaDB 12.1 | 132 | 367 | 624 | 799 | 1,106 | 1,243 | 1,024 | 601 |
| MySQL 5.7 | 120 | 346 | 589 | 740 | 776 | 784 | 798 | 785 |
| MySQL 8.0 | 116 | 288 | 502 | 643 | 823 | 926 | 1,020 | 1,123 |
| MySQL 8.4 | 116 | 309 | 570 | 764 | 907 | 986 | 967 | 977 |
| MySQL 9.6 | 119 | 310 | 567 | 767 | 893 | 984 | 975 | 959 |
| Percona 5.7 | 126 | 366 | 653 | 876 | 1,078 | 1,251 | 1,376 | 1,417 |
| Percona 8.0 | 121 | 304 | 487 | 546 | 605 | 671 | 718 | 797 |
| Percona 8.4 | 119 | 317 | 598 | 791 | 943 | 1,018 | 1,021 | 1,049 |
Percona 5.7 leads at 1,417 TPS (512 threads). MariaDB engines peak at 128 threads (~1,240 TPS). Percona 8.0 reaches only 797 TPS.
Table 6.3.3 — TPS by Thread Count, 2 GB Buffer Pool (Read-Write, Network)
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 | 94 | 246 | 377 | 483 | 611 | 669 | 582 | 239 |
| MariaDB 11.4 | 91 | 239 | 367 | 484 | 616 | 661 | 531 | 238 |
| MariaDB 12.1 | 79 | 236 | 364 | 478 | 602 | 654 | 506 | 224 |
| MySQL 5.7 | 73 | 236 | 397 | 481 | 535 | 571 | 578 | 368 |
| MySQL 8.0 | 50 | 176 | 304 | 416 | 524 | 577 | 640 | 533 |
| MySQL 8.4 | 59 | 181 | 342 | 461 | 531 | 518 | 526 | 500 |
| MySQL 9.6 | 58 | 182 | 337 | 458 | 529 | 516 | 524 | 508 |
| Percona 5.7 | 72 | 237 | 401 | 538 | 670 | 757 | 799 | 842 |
| Percona 8.0 | 66 | 184 | 326 | 380 | 426 | 456 | 470 | 449 |
| Percona 8.4 | 58 | 188 | 350 | 468 | 558 | 537 | 538 | 495 |
Percona 5.7 leads at 842 TPS (512 threads). MariaDB engines peak at 128 threads (~655 TPS). Network overhead adds 2–5% to I/O-bound limitations.
Table 6.3.4 — MariaDB Version Progression (32 GB, RW, Network) — baseline: MariaDB 10.11
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MariaDB 10.11 (TPS) | 337 | 1,204 | 3,417 | 5,355 | 7,812 | 10,050 | 8,570 | 4,088 |
| MariaDB 11.4 (TPS) | 288 | 1,043 | 3,008 | 4,604 | 7,090 | 9,512 | 6,581 | 3,489 |
| vs MariaDB 10.11 | -14.6% | -13.4% | -12.0% | -14.0% | -9.2% | -5.4% | -23.2% | -14.7% |
| MariaDB 12.1 (TPS) | 292 | 1,056 | 3,009 | 4,812 | 7,187 | 9,599 | 6,838 | 3,652 |
| vs MariaDB 10.11 | -13.3% | -12.3% | -11.9% | -10.1% | -8.0% | -4.5% | -20.2% | -10.7% |
MariaDB (baseline 10.11): The regression pattern from local tests holds and intensifies over network. Every thread count for both 11.4 and 12.1 degrades ≥5%, with 11.4 reaching −23% at 256t and 12.1 at −20%. The 512-thread drop is the most acute, with both newer versions losing 12–15% versus 10.11.
Table 6.3.5 — MySQL Version Progression (32 GB, RW, Network) — baseline: MySQL 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| MySQL 5.7 (TPS) | 262 | 1,020 | 2,957 | 4,849 | 6,822 | 7,146 | 5,838 | 3,346 |
| MySQL 8.0 (TPS) | 265 | 949 | 2,824 | 4,829 | 7,787 | 9,125 | 9,736 | 9,479 |
| vs MySQL 5.7 | +1.2% | -7.0% | -4.5% | -0.4% | +14.1% | +27.7% | +66.8% | +183.3% |
| MySQL 8.4 (TPS) | 258 | 911 | 2,571 | 4,322 | 6,605 | 9,408 | 11,279 | 12,781 |
| vs MySQL 5.7 | -1.4% | -10.7% | -13.1% | -10.9% | -3.2% | +31.7% | +93.2% | +282.0% |
| MySQL 9.6 (TPS) | 256 | 904 | 2,560 | 4,262 | 6,489 | 9,173 | 10,989 | 12,715 |
| vs MySQL 5.7 | -2.0% | -11.4% | -13.4% | -12.1% | -4.9% | +28.4% | +88.2% | +280.0% |
MySQL (baseline 5.7): MySQL 8.0 regresses at 4t (−7%). MySQL 8.4 and 9.6 regress at 4t (~−11%), 16t (~−13%), and 32t (~−11–12%), consistent with the local pattern. The regressions are transient and offset by large gains at 128–512 threads.
Table 6.3.6 — Percona Version Progression (32 GB, RW, Network) — baseline: Percona 5.7
| Engine | 1t | 4t | 16t | 32t | 64t | 128t | 256t | 512t |
|---|---|---|---|---|---|---|---|---|
| Percona 5.7 (TPS) | 269 | 1,059 | 3,082 | 4,713 | 6,733 | 8,585 | 9,939 | 10,863 |
| Percona 8.0 (TPS) | 267 | 984 | 2,994 | 5,054 | 7,826 | 8,919 | 9,546 | 9,231 |
| vs Percona 5.7 | -0.8% | -7.1% | -2.9% | +7.2% | +16.2% | +3.9% | -3.9% | -15.0% |
| Percona 8.4 (TPS) | 257 | 921 | 2,725 | 4,454 | 6,692 | 9,379 | 11,250 | 13,076 |
| vs Percona 5.7 | -4.5% | -13.1% | -11.6% | -5.5% | -0.6% | +9.2% | +13.2% | +20.4% |
Percona (baseline 5.7): Percona 8.0 regresses at 4t (−7%) and 512t (−15%). Percona 8.4 regresses at 4t (−13%), 16t (−12%), and 32t (−6%), closely mirroring the MySQL 8.4 profile. Network overhead does not change the generational ranking order.
9. Key Findings Summary
| Finding | Detail |
|---|---|
| Percona 8.4 / MySQL 8.4 lead RW at 32 GB | 13,385 / 13,325 TPS at 512 threads — unique high-concurrency scaling |
| MariaDB 10.11 dominates read-only | 32,392 TPS at 128 threads — 38% ahead of the next best engine |
| Percona 5.7 best under memory pressure | 813 TPS at 512 threads (2 GB tier) — continues scaling where modern engines collapse |
| MariaDB 12.1 regresses vs. 10.11 | 10.11 LTS retains substantial advantage, especially in read-only (~35% gap) |
| MySQL 5.7 collapses at high RO concurrency | Peak at 32 threads (13,684 TPS), drops to 3,889 at 512 threads |
| MySQL 8.0 ≈ Percona 8.0 | Results differ by <3% across all conditions — Percona patches have negligible OLTP impact |
| Buffer pool is a 10–26× lever | Percona 8.4: 25.0× difference. MySQL 5.7: least sensitivity at 12.8× |
| Network adds 2–10% overhead | MariaDB engines more affected at extreme concurrency than MySQL/Percona |
| RO/RW ratio varies 1.7×–3.0× | MariaDB 10.11: 3.0×. MySQL 8.4 / Percona 8.4: 1.7–1.8× (more efficient write paths) |
Version Progression — All Differences Greater Than 5% vs Baseline (32 GB)
RW Local
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 11.4 vs MariaDB 10.11 | 1 | -20.2% |
| MariaDB 11.4 vs MariaDB 10.11 | 4 | -9.9% |
| MariaDB 11.4 vs MariaDB 10.11 | 16 | -10.3% |
| MariaDB 11.4 vs MariaDB 10.11 | 32 | -8.5% |
| MariaDB 11.4 vs MariaDB 10.11 | 64 | -5.2% |
| MariaDB 11.4 vs MariaDB 10.11 | 256 | -10.8% |
| MariaDB 11.4 vs MariaDB 10.11 | 512 | -15.4% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 12.1 vs MariaDB 10.11 | 1 | -18.8% |
| MariaDB 12.1 vs MariaDB 10.11 | 4 | -9.0% |
| MariaDB 12.1 vs MariaDB 10.11 | 16 | -10.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 32 | -7.7% |
| MariaDB 12.1 vs MariaDB 10.11 | 64 | -5.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 256 | -10.1% |
| MariaDB 12.1 vs MariaDB 10.11 | 512 | -12.5% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.0 vs MySQL 5.7 | 4 | -9.3% |
| MySQL 8.0 vs MySQL 5.7 | 16 | -7.5% |
| MySQL 8.0 vs MySQL 5.7 | 64 | +17.0% |
| MySQL 8.0 vs MySQL 5.7 | 128 | +30.6% |
| MySQL 8.0 vs MySQL 5.7 | 256 | +81.3% |
| MySQL 8.0 vs MySQL 5.7 | 512 | +202.9% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.4 vs MySQL 5.7 | 4 | -16.4% |
| MySQL 8.4 vs MySQL 5.7 | 16 | -18.0% |
| MySQL 8.4 vs MySQL 5.7 | 32 | -11.5% |
| MySQL 8.4 vs MySQL 5.7 | 128 | +40.0% |
| MySQL 8.4 vs MySQL 5.7 | 256 | +114.1% |
| MySQL 8.4 vs MySQL 5.7 | 512 | +323.9% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 9.6 vs MySQL 5.7 | 4 | -17.6% |
| MySQL 9.6 vs MySQL 5.7 | 16 | -19.2% |
| MySQL 9.6 vs MySQL 5.7 | 32 | -13.2% |
| MySQL 9.6 vs MySQL 5.7 | 128 | +35.8% |
| MySQL 9.6 vs MySQL 5.7 | 256 | +109.4% |
| MySQL 9.6 vs MySQL 5.7 | 512 | +319.2% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.0 vs Percona 5.7 | 4 | -10.6% |
| Percona 8.0 vs Percona 5.7 | 64 | +11.5% |
| Percona 8.0 vs Percona 5.7 | 256 | -9.5% |
| Percona 8.0 vs Percona 5.7 | 512 | -14.9% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.4 vs Percona 5.7 | 4 | -13.8% |
| Percona 8.4 vs Percona 5.7 | 16 | -13.0% |
| Percona 8.4 vs Percona 5.7 | 32 | -7.0% |
| Percona 8.4 vs Percona 5.7 | 128 | +5.8% |
| Percona 8.4 vs Percona 5.7 | 256 | +12.8% |
| Percona 8.4 vs Percona 5.7 | 512 | +20.5% |
RO Local
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 11.4 vs MariaDB 10.11 | 1 | -22.5% |
| MariaDB 11.4 vs MariaDB 10.11 | 4 | -23.3% |
| MariaDB 11.4 vs MariaDB 10.11 | 16 | -22.3% |
| MariaDB 11.4 vs MariaDB 10.11 | 32 | -25.2% |
| MariaDB 11.4 vs MariaDB 10.11 | 64 | -25.6% |
| MariaDB 11.4 vs MariaDB 10.11 | 128 | -27.9% |
| MariaDB 11.4 vs MariaDB 10.11 | 256 | -27.6% |
| MariaDB 11.4 vs MariaDB 10.11 | 512 | -27.0% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 12.1 vs MariaDB 10.11 | 1 | -22.2% |
| MariaDB 12.1 vs MariaDB 10.11 | 4 | -19.7% |
| MariaDB 12.1 vs MariaDB 10.11 | 16 | -19.9% |
| MariaDB 12.1 vs MariaDB 10.11 | 32 | -23.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 64 | -23.5% |
| MariaDB 12.1 vs MariaDB 10.11 | 128 | -25.6% |
| MariaDB 12.1 vs MariaDB 10.11 | 256 | -25.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 512 | -24.9% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.0 vs MySQL 5.7 | 1 | +12.1% |
| MySQL 8.0 vs MySQL 5.7 | 4 | +11.3% |
| MySQL 8.0 vs MySQL 5.7 | 16 | +9.1% |
| MySQL 8.0 vs MySQL 5.7 | 32 | +11.5% |
| MySQL 8.0 vs MySQL 5.7 | 64 | +46.0% |
| MySQL 8.0 vs MySQL 5.7 | 128 | +89.7% |
| MySQL 8.0 vs MySQL 5.7 | 256 | +207.8% |
| MySQL 8.0 vs MySQL 5.7 | 512 | +429.3% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.4 vs MySQL 5.7 | 1 | +15.2% |
| MySQL 8.4 vs MySQL 5.7 | 4 | +7.0% |
| MySQL 8.4 vs MySQL 5.7 | 16 | +7.5% |
| MySQL 8.4 vs MySQL 5.7 | 32 | +10.5% |
| MySQL 8.4 vs MySQL 5.7 | 64 | +47.0% |
| MySQL 8.4 vs MySQL 5.7 | 128 | +98.3% |
| MySQL 8.4 vs MySQL 5.7 | 256 | +221.1% |
| MySQL 8.4 vs MySQL 5.7 | 512 | +439.6% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 9.6 vs MySQL 5.7 | 1 | +16.4% |
| MySQL 9.6 vs MySQL 5.7 | 4 | +7.3% |
| MySQL 9.6 vs MySQL 5.7 | 16 | +8.4% |
| MySQL 9.6 vs MySQL 5.7 | 32 | +10.6% |
| MySQL 9.6 vs MySQL 5.7 | 64 | +46.8% |
| MySQL 9.6 vs MySQL 5.7 | 128 | +95.3% |
| MySQL 9.6 vs MySQL 5.7 | 256 | +215.1% |
| MySQL 9.6 vs MySQL 5.7 | 512 | +429.6% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.0 vs Percona 5.7 | 1 | +10.9% |
| Percona 8.0 vs Percona 5.7 | 4 | +12.1% |
| Percona 8.0 vs Percona 5.7 | 16 | +11.7% |
| Percona 8.0 vs Percona 5.7 | 256 | -5.3% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.4 vs Percona 5.7 | 1 | +14.7% |
| Percona 8.4 vs Percona 5.7 | 4 | +7.3% |
| Percona 8.4 vs Percona 5.7 | 16 | +9.9% |
| Percona 8.4 vs Percona 5.7 | 32 | +5.6% |
RW Network
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 11.4 vs MariaDB 10.11 | 1 | -14.6% |
| MariaDB 11.4 vs MariaDB 10.11 | 4 | -13.4% |
| MariaDB 11.4 vs MariaDB 10.11 | 16 | -12.0% |
| MariaDB 11.4 vs MariaDB 10.11 | 32 | -14.0% |
| MariaDB 11.4 vs MariaDB 10.11 | 64 | -9.2% |
| MariaDB 11.4 vs MariaDB 10.11 | 128 | -5.4% |
| MariaDB 11.4 vs MariaDB 10.11 | 256 | -23.2% |
| MariaDB 11.4 vs MariaDB 10.11 | 512 | -14.7% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MariaDB 12.1 vs MariaDB 10.11 | 1 | -13.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 4 | -12.3% |
| MariaDB 12.1 vs MariaDB 10.11 | 16 | -11.9% |
| MariaDB 12.1 vs MariaDB 10.11 | 32 | -10.1% |
| MariaDB 12.1 vs MariaDB 10.11 | 64 | -8.0% |
| MariaDB 12.1 vs MariaDB 10.11 | 256 | -20.2% |
| MariaDB 12.1 vs MariaDB 10.11 | 512 | -10.7% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.0 vs MySQL 5.7 | 4 | -7.0% |
| MySQL 8.0 vs MySQL 5.7 | 64 | +14.1% |
| MySQL 8.0 vs MySQL 5.7 | 128 | +27.7% |
| MySQL 8.0 vs MySQL 5.7 | 256 | +66.8% |
| MySQL 8.0 vs MySQL 5.7 | 512 | +183.3% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 8.4 vs MySQL 5.7 | 4 | -10.7% |
| MySQL 8.4 vs MySQL 5.7 | 16 | -13.1% |
| MySQL 8.4 vs MySQL 5.7 | 32 | -10.9% |
| MySQL 8.4 vs MySQL 5.7 | 128 | +31.7% |
| MySQL 8.4 vs MySQL 5.7 | 256 | +93.2% |
| MySQL 8.4 vs MySQL 5.7 | 512 | +282.0% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| MySQL 9.6 vs MySQL 5.7 | 4 | -11.4% |
| MySQL 9.6 vs MySQL 5.7 | 16 | -13.4% |
| MySQL 9.6 vs MySQL 5.7 | 32 | -12.1% |
| MySQL 9.6 vs MySQL 5.7 | 128 | +28.4% |
| MySQL 9.6 vs MySQL 5.7 | 256 | +88.2% |
| MySQL 9.6 vs MySQL 5.7 | 512 | +280.0% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.0 vs Percona 5.7 | 4 | -7.1% |
| Percona 8.0 vs Percona 5.7 | 32 | +7.2% |
| Percona 8.0 vs Percona 5.7 | 64 | +16.2% |
| Percona 8.0 vs Percona 5.7 | 512 | -15.0% |
| Database Engines Comparison | Thread Count | Difference vs Baseline |
|---|---|---|
| Percona 8.4 vs Percona 5.7 | 4 | -13.1% |
| Percona 8.4 vs Percona 5.7 | 16 | -11.6% |
| Percona 8.4 vs Percona 5.7 | 32 | -5.5% |
| Percona 8.4 vs Percona 5.7 | 128 | +9.2% |
| Percona 8.4 vs Percona 5.7 | 256 | +13.2% |
| Percona 8.4 vs Percona 5.7 | 512 | +20.4% |
10. Methodology Notes & Caveats
8.1 Limitations
- All tests run on a single server host — results reflect single-node performance only. Replication, cluster, or proxy overhead are not measured.
- The sysbench
oltp_read_writeandoltp_read_onlyworkloads are synthetic OLTP proxies. Real application query distributions differ; results should be treated as directional, not absolute. - Network tests were conducted over a dedicated 10Gb/s Ethernet link between two bare-metal hosts. Results may differ on shared networks, or cloud environments.
8.2 Reproducibility
All benchmark scripts are published at github.com/Percona-Lab-results/2026-interactive-metrics/tree/test-data. OS support is currently limited to Ubuntu 24.04.
The repository contains four entry-point scripts. To reproduce:
1. Install prerequisites:
|
1 |
sudo apt install docker.io sysstat sysbench mysql-client dstat -y |
Grant Permissions: Add your current user to the docker group by running:
|
1 |
sudo usermod -aG docker $USER |
Log out and back in, or run newgrp docker to update your group permissions without restarting.
2. For local read-write benchmarks:
|
1 |
./run_all.sh |
Calls run_metrics.sh for each engine. Results stored in benchmark_logs/{db}/{version}/.
3. For local read-only benchmarks:
|
1 |
./run_all.sh 1 |
Enables read-only mode. Results stored in benchmark_logs_read_only/{db}/{version}/.
4. For network read-write benchmarks:
Install prerequisites on the remote host and add the user to the docker group as described in step 1.
|
1 |
./run_remote_all.sh <ssh-key-path> |
Manages Docker on remote host via SSH, deploys config via SCP, collects telemetry remotely. Results in benchmark_remote_logs/{db}/{version}/.
5. For network read-only benchmarks:
|
1 |
./run_remote_all.sh <ssh-key-path> 1 |
Combines remote execution with read-only mode. Results in benchmark_remote_logs_read_only/{db}/{version}/.
Each run_metrics.sh / run_remote_metrics.sh invocation handles the full lifecycle for one engine: container startup, version detection via SELECT VERSION(), configuration generation with version-specific branching, buffer pool verification, data preparation (20 tables × 5M rows), two-phase warmup, and 15-minute measurement runs at all eight concurrency levels across all three buffer pool tiers. System telemetry (iostat, vmstat, mpstat, dstat) is collected at 1-second granularity alongside each measurement. Server variables (SHOW VARIABLES), status counters (SHOW STATUS), and pt-mysql-summary output are captured per tier.
Default Schema sbtest is created upon docker container run. Tables are populated with the following sysbench command:
|
1 2 |
sysbench oltp_read_only --mysql-host=$DB_HOST --mysql-user=$DB_USER --mysql-password=$DB_PASS --mysql-db=$DB_DATABASE --tables=20 --table-size=$TABLE_ROWS --threads=64 prepare |
8.3 Configuration Philosophy
The benchmark uses a single tuned config rather than default settings, for a deliberate reason: default configurations are not representative of production deployments and systematically understate the performance potential of modern InnoDB. The config applied here is conservative but reasonable — it does not apply per-engine exotic tuning, ensuring all engines compete on roughly equal footing at a production-realistic baseline.
Report generated from raw benchmark data in branch raw-data of the repository. Charts generated with matplotlib. Document assembled programmatically.
Percona Lab Results · 2026 · github.com/Percona-Lab-results/2026-interactive-metrics