By Percona Lab Results  ·  2026  ·  MySQL MariaDB Percona Benchmark Database

MySQL Ecosystem Performance Benchmark Report 2026

Comparative Analysis of InnoDB-Compatible Engines — Percona Lab Results

Repository: github.com/Percona-Lab-results/2026-interactive-metrics

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:

  1. Stop and remove any existing benchmark container
  2. Detect actual server version by connecting and running SELECT VERSION()
  3. Generate a version-specific configuration file (see Section 3)
  4. Restart the container with the new configuration mounted
  5. Wait for the server to become ready (mysqladmin / mariadb-admin ping loop)
  6. 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_write and oltp_read_only workloads 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:

Grant Permissions: Add your current user to the docker group by running:

Log out and back in, or run newgrp docker to update your group permissions without restarting.

2. For local read-write benchmarks:

Calls run_metrics.sh for each engine. Results stored in benchmark_logs/{db}/{version}/.

3. For local read-only benchmarks:

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.

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:

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:

 

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

Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments