This has results from sysbench on a small server with Postgres versions 12 through 19 beta1. Sysbench is run with high concurrency (40 connections) and a cached database. The purpose is to search for changes in performance. Postgres remains boring, it is hard to find performance regressions. tl;dr for Postgres 17 to 19 there are no regressions throughput on the read-only-count test improves by ~3X…
This has results for Postgres versions 19 beta1, 18.4 and 17.10 with the Insert Benchmark on a small server using a cached and CPU-bound workload. I also used MySQL 8.4.8 to see where performance was different. Postgres continues to be boring in a good way. It is hard to find performance regressions. tl;dr create index (the l.x step) is faster in Postgres 19beta1. A Postgres expert told me that…
This has results for HammerDB tproc-c on a large server using MySQL and Postgres. I am new to HammerDB and still figuring out how to explain and present results so I will keep this simple and just share graphs without explaining the results. tl;dr There are small regressions in versions 16, 17 and 18 NOPM usually improves a small amount in 19 beta1 relative to 18 Builds, configuration and hardware…
This has results for modern Postgres and MySQL using write-heavy tests from sysbench and a large server. I think there are regressions in Postgres that arrive in some of versions 16, 17, 18 and 19 beta1 but I am far from certain and this blog post is just another step in my journey to figure that out. tl;dr Postgres suffers a lot from throughput variation while MySQL+InnoDB does not InnoDB gets…
This has results for Postgres versions 19 beta1, 18.4 and 17.10 with the Insert Benchmark on a small server using a cached and CPU-bound workload. Postgres continues to be boring in a good way. It is hard to find performance regressions. tl;dr I don't see regressions here in 19 beta1 I see some improvements here in 19 beta1 index create (l.x) is faster but the step is short-running so I don't…
This has results from sysbench on a small server with Postgres 19 beta1, 18.4 and 17.10. Sysbench is run with low concurrency (1 thread) and a cached database. The purpose is to search for changes in performance, often from new CPU overheads. tl;dr 19beta1, 18.4 and 17.10 have mostly similar performance There might be small regressions (about 2%) from 17.10 to 19beta1 but my tests are not good at…
This has results from sysbench on a small server with MySQL 9.7.0 and 8.4.8. Sysbench is run with low concurrency (1 thread) and a cached database. The purpose is to search for changes in performance, often from new CPU overheads. I tested MySQL 9.7.0 with and without the hypergraph optimizer enabled. I don't expect it to help much because the queries run here are simple. I hope to learn it…
This post provides another way to see the performance regressions in MySQL from versions 5.6 to 9.7. It complements what I shared in a recent post . The workload here is cached by InnoDB and my focus is on regressions from new CPU overheads. The good news is that there are few regressions after 8.0. The bad news is that there were many prior to that and these are unlikely to be undone. tl;dr for…
This has results for MariaDB versions 10.2 through 13.0 vs the Insert Benchmark on a 32-core server. The goal is to see how performance changes over time to find regressions or highlight improvements. My previous post has results from a 24-core server. Differences between these servers include: RAM - 32-core server has 128G, 24-core server has 64G fsync latency - 32-core has an SSD with high fsync…
This has results for MariaDB versions 10.2 through 13.0 vs the Insert Benchmark on a 24-core server. The goal is to see how performance changes over time to find regressions or highlight improvements. MariaDB 13.0.0 is faster than 10.2.30 on most benchmark steps and otherwise as fast as 10.2.30. This is a great result. tl;dr for a CPU-bound workload the write-heavy steps are much faster in 13.0.0…
This has results for sysbench vs MariaDB on a small server. I repeated tests using the same charset (latin1) for all versions as explained here . In previous results I used a multi-byte charset for modern MariaDB (probably 11.4+) by mistake and that adds a 5% CPU overhead for many tests. tl;dr MariaDB has done much better than MySQL at avoid regressions from code bloat. There are several…
This post has results for CPU-bound sysbench vs Postgres, MySQL and MariaDB on a large server using older and newer releases. The goal is to measure: how performance changes over time from old versions to new versions performance between modern MySQL, MariaDB and Postgres The context here is a collection of microbenchmarks using a large server with high concurrency. Results on other workloads…
This has results for sysbench on a small server and compares performanc for Postgres, MySQL and MariaDB compiled using clang vs using gcc. tl;dr Throughput with clang and gcc is similar Builds, configuration and hardware I compiled Postgres 18.3, MySQL 8.4.8 and MariaDB 11.8.6 from source. The server has 8 AMD cores with SMT disabled and 32G of RAM. The OS is Ubuntu 24.04, gcc is version 13.3.0…
This has results for Postgres versions 12.22 through 18.3 with the Insert Benchmark on a small server. My previous post for the same hardware with results up to Postgres 18.1 is here . This post also has results for: all 17.x releases from 17.0 through 17.9 18.2 with and without full page writes enabled both 1 and 4 users Postgres continues to be boring in a good way. It is hard to find…
MySQL and MariaDB have many character-set related options, perhaps too many: character_set_client character_set_connection character_set_database character_set_filesystem character_set_results character_set_server character_set_system This is a topic that I don't know much about and I am still far from an expert. My focus has been other DBMS topics. But I spent time recently on this topic while…
This has performance results for InnoDB from MySQL 5.6.51, 5.7.44, 8.0.X, 8.4.8 and 9.7.0 on a small server with sysbench microbenchmarks. The workload here is cached by InnoDB and my focus is on regressions from new CPU overheads. In many cases, MySQL 5.6.51 gets about 1.5X more QPS than modern MySQL (8.0.x thru 9.7). The root cause is new CPU overhead, possibly from code bloat. tl;dr There are…
MariaDB 12.3 has a new feature enabled by the option binlog_storage_engine . When enabled it uses InnoDB instead of raw files to store the binlog. A big benefit from this is reducing the number of fsync calls per commit from 2 to 1 because it reduces the number of resource managers from 2 (binlog, InnoDB) to 1 (InnoDB). This work was done by Small Datum LLC and sponsored by the MariaDB Foundation.…
MariaDB 12.3 has a new feature enabled by the option binlog_storage_engine . When enabled it uses InnoDB instead of raw files to store the binlog. A big benefit from this is reducing the number of fsync calls per commit from 2 to 1 because it reduces the number of resource managers from 2 (binlog, InnoDB) to 1 (InnoDB). See this blog post for more details on the new feature. This work was done by…
I started to use TPROC-C from HammerDB to test MariaDB, MySQL and Postgres and published results for MySQL and Postgres on small and large servers. This post provides more detail on CPU overheads for MariaDB, MySQL and Postgres on a small server. tl;dr Postgres get the most throughput and the difference is large. MariaDB gets more throughput than MySQL Throughput improves for MariaDB and MySQL but…
I am fascinated by tech marketing but would be lousy at it. A common practice is to admit nothing -- my product, project, company, idea is perfect. And I get it because admitting something isn't perfect just provides fodder for marketing done by the other side, and that marketing is often done in bad faith. But it is harder to fix things when you don't acknowledge the problems. I wrote about this…
Last year I shared many posts documenting MariaDB performance for vector search using ann-benchmarks . Performance was great in MariaDB 11 and this blog post explains that it is even better in MariaDB 12. This work was done by Small Datum LLC and sponsored by the MariaDB Foundation. My previous posts were published in January and February 2025. tl;dr Vector search recall vs precision in MariaDB…
Throughput for the write-heavy steps of the Insert Benchmark look like a distorted sine wave with Postgres on CPU-bound workloads but not on IO-bound workloads. For the CPU-bound workloads the chart for max response time at N-second intervals for inserts is flat but for deletes it looks like the distorted sine wave. To see the chart for deletes, scroll down from here . So this looks like a problem…
MariaDB 12.3 has a new feature enabled by the option binlog_storage_engine . When enabled it uses InnoDB instead of raw files to store the binlog. A big benefit from this is reducing the number of fsync calls per commit from 2 to 1 because it reduces the number of resource managers from 2 (binlog, InnoDB) to 1 (InnoDB). My previous post had results for sysbench with a small server. This post has…
MariaDB 12.3 has a new feature enabled by the option binlog_storage_engine . When enabled it uses InnoDB instead of raw files to store the binlog. A big benefit from this is reducing the number of fsync calls per commit from 2 to 1 because it reduces the number of resource managers from 2 (binlog, InnoDB) to 1 (InnoDB). In this post I have results for the performance benefit from this when using…
This has results for HammerDB tproc-c on a small server using MySQL and Postgres. I am new to HammerDB and still figuring out how to explain and present results so I will keep this simple and just share graphs without explaining the results. The comparison might favor Postgres for the IO-bound workloads because I used smaller buffer pools than normal to avoid OOM. I have to do this because RSS for…