Where the open source database community meets: Use code PERCONA75 and secure your spot for Percona Live.  Register

How MySQL and MariaDB Perform on NVMe Storage

July 30, 2020
Author
Vadim Tkachenko
Share this Post:

MariaDB no longer meeting your needs?

Migrate to Percona software for MySQL – an open source, production-ready, and enterprise-grade MySQL alternative.

Learn More

MySQL MariaDB NVMe
MySQL and MariaDB on NVMe Storage – The Great Equalizer

Continuing the checkpointing series—previously covering MongoDB, PostgreSQL, and MySQL and MariaDB on Enterprise SSD Storage—this post looks at performance on NVMe storage.

Benchmark

To evaluate MariaDB and MySQL, sysbench-tpcc with 1000 warehouses was used.

Storage: Intel SSD DC P4610 NVMe (up to ~222k write IOPS, ~638k read IOPS).

Settings

  • Dataset ~100GB (fits in memory)
  • Buffer pool: 140GB
  • Write-heavy workload (ACID compliant)
  • innodb_io_capacity = 15000
  • innodb_io_capacity_max = 20000

Benchmark command:

The benchmark runs for ~3 hours, reporting every second.

Results

MySQL NVMe Storage

Long-duration runs reveal internal behavior. MariaDB stabilizes after ~2500 seconds, showing a U-shaped recovery pattern after warm-up.

MySQL also shows variability. A 1-minute moving average clarifies trends:

MariaDB NVMe Storage

MySQL still shows periodic dips, but far less severe than on SATA SSD. NVMe appears more tolerant of I/O spikes.

Disclaimer: MariaDB 10.5.4 developers indicated upcoming performance fixes in later releases.

See also: MariaDB 10.5.5 performance improvements.

Final Thoughts

NVMe storage is a strong choice for improving database performance, especially when handling high I/O workloads.

0 0 votes
Article Rating
Subscribe
Notify of
guest

14 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Wilson Hauck
5 years ago

With this capability on NVME,
With the storage on INTEL SSDPE2KE032T8 (Intel® SSD DC P4610 Series, PCIe 3.1 x4, NVMe). The storage is capable of 222000 IOPS in random writes and 638000 IOPS in random reads.
Why did you choose to use in the configuration,
For innodb_io_capacity I will use 15000 and innodb_io_capacity_max = 20000 to utilize more throughput of NVMe storage.
Did you leave 90%+ of the capability on the table – unused?
Thanks for the details.

Vladislav Vaintroub
5 years ago

Why to spend hours on testing on known slightly unfortunate version, and draw conclusions which could be invalidated by the very next release of MariaDB. I mean you’ve been informed about bug that slipped into 10.5.4 , so maybe it makes sense to git clone https://github.com/mariadb/server, compile, and inform the world that those fixes do not change anything, or surprise yourself first, and the world second, about how much better MariaDB turned out to be.

Vladislav Vaintroub
5 years ago

Why the GA release should not be used? It should be used alright, and a performance bug can slip in, like any other bug, and it is documented, and was timely fixed, even without you filing any bugs. It is not a showstopper. If you asked whether it is good for benchmarking, we’d tell you a specific MDEV, but you did not ask.

Sergei Golubchik
5 years ago

Who did the request to? Just curious

Vladislav Vaintroub
5 years ago

You can go official channels and higher-ups, but they (not sure who you meant, Serg, Max, or Rasmus) might be either out sick, be on vacation, or (surprise) busy, might not have overview over all the Innodb bugs, or time to spend on investigation of ad-hoc email requests.

As for the ways to communicate, Zulip is probably the best one. You’ll find Innodb lead in there, who will be pleased to chat with you on your findings. A topic that can be special interest for you is here https://mariadb.zulipchat.com/#narrow/stream/118759-general/topic/InnoDB.20scalability.
If you are not up to chatting, we still have a mailing list, and we even have JIRA.

Nevermind that, so now, with the feedback you got, what will you do?

Jamie Donovan
Jamie Donovan
5 years ago

I can see that things are a bit touchy regarding the issues in MariaDb. I for one am interested to see how the results compare with known bugs fixed. If it’s a design issue, it’s true that one can’t expect to wait. But I’d love to see an update on the benchmark with bugfixes while this is fresh in our memories. Thanks for your hard work!

Michael Widenius
5 years ago

Is the MySQL and MariaDB configurations the same as used in your previous benchmarks that you refer to in this blog post?
In other words, the same as in pointed to in https://github.com/Percona-Lab-results/2020-07-MySQL-MariaDB/blob/master/notebook/PostgreSQL-MySQL.ipynb ?

Eric Robinson
Eric Robinson
4 years ago

Vadim, other than the model of the drives and the total IOPS capacity, you don’t mention the storage config. Is it RAID 0, 1, or what? Independent disks? I repeated your test on my own hardware, but it was very hard to reproduce your results. My server is 48 cores with 1TB RAM and 6 x Enterprise NVME drives. I managed to get 10,000 TPS for a while when I was using just 1 drive, but all of my other tests (with various RAID setups) yielded much less. Also, I never got a steady state. The performance with 1 drive started at about 11,000 TPS but steadily declined with time. By the end of the 3 hours, TPS was down to about 9500. With RAIDZ or LVM RAID5, TPS was around 4-6K.

Far
Enough.

Said no pioneer ever.
MySQL, PostgreSQL, InnoDB, MariaDB, MongoDB and Kubernetes are trademarks for their respective owners.
© 2026 Percona All Rights Reserved