{"id":1850,"date":"2025-07-29T12:35:41","date_gmt":"2025-07-29T12:35:41","guid":{"rendered":"https:\/\/www.hammerdb.com\/blog\/?p=1850"},"modified":"2025-07-29T12:35:41","modified_gmt":"2025-07-29T12:35:41","slug":"how-to-compare-open-source-and-proprietary-databases-with-hammerdb","status":"publish","type":"post","link":"https:\/\/www.hammerdb.com\/blog\/uncategorized\/how-to-compare-open-source-and-proprietary-databases-with-hammerdb\/","title":{"rendered":"How to Compare Open Source and Proprietary Databases with HammerDB"},"content":{"rendered":"<p>We&#8217;ve recently given presentations at MariaDB MeetUp days on the methodology for comparing open source and proprietary databases. As we&#8217;ve been asked numerous times for the slides in this post we provide the content and summary of the presentation.<\/p>\n<h2>Benchmarking Performance Without Restrictions<\/h2>\n<p>Sharing performance metrics for proprietary databases such as Oracle and SQL Server is restricted by license agreement specifically DeWitt clauses. These clauses prohibit the publication of benchmark results without explicit vendor approval and you should be fully aware of what you can and can&#8217;t share without permission. Open source databases such as MariaDB, MySQL and PostgreSQL have no such restrictions, enabling freely sharing of performance evaluations using HammerDB.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" srcset=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03-1024x576.png 1024w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03-300x169.png 300w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03-768x432.png 768w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03-1536x864.png 1536w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_03.png 2000w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<p>HammerDB does not give legal advice, however if you run your own benchmarks on commercial databases with HammerDB and keep the results private then you are on safe ground from infringing any license conditions. There are no restrictions on any database on running benchmarks, only restrictions on sharing the results.<\/p>\n<hr \/>\n<h2>HammerDB: The Open Source Benchmarking Tool<\/h2>\n<p>HammerDB is a widely adopted benchmarking tool designed for relational databases. It is hosted by the TPC Council and available under the GPLv3 license on GitHub. Its cross-platform design supports both Windows and Linux clients, and Docker containers are available for simplified deployment. ARM support is also in development.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_05.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_05-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Do check the HammerDB download<a href=\"https:\/\/www.hammerdb.com\/stats.html\"> statistics<\/a> page as HammerDB is cloned, and downloaded hundreds of thousands of times globally.<\/p>\n<p>HammerDB supports multiple databases including MariaDB, Oracle, SQL Server, IBM Db2, MySQL, and PostgreSQL all accessed via native interfaces written in C for maximum performance and scalability.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_06.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_06-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>HammerDB implements two primary workloads:<\/p>\n<ul>\n<li><strong>TPROC-C<\/strong>: An OLTP workload based on the TPC-C standard, designed to emulate transaction processing environments with high concurrency and throughput.<\/li>\n<li><strong>TPROC-H<\/strong>: An OLAP workload modeled after TPC-H, used for analytics and decision support scenarios with large scan-heavy queries.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_07.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_07-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>A common question is that if the workloads are based on the TPC-C and TPC-H standards then why not simply use TPC-C and TPC-H and the associated terminology such as tpmC and QphH. The answer is clear in that this terminology is copyrighted and a trademark of the TPC-Council and any tool and users using this terminology is violating these restrictions unless a workload is\u00a0 approved and published on the official TPC site. Using HammerDB you are assured that no copyright or trademarks are infringed when using or sharing (where permitted) performance data.<\/p>\n<p>As would be expected with a database benchmarking tool, all workloads are implemented in SQL, for every workload and every database what runs in the database is SQL. For efficiency all of the HammerDB database interfaces are written in the native &#8216;C&#8217; interface.<\/p>\n<p>A key database benchmarking concept is that the tool and workload should stress the concurrency in the database and not in the client. A number of database benchmarking tools fall at this first hurdle. HammerDB is designed with low overhead and non-blocking, multithreaded parallel execution, ensuring we are stressing the concurrency control in the database and not in the client.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_08.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_08-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>If you generate a flamegraph during a HammerDB test it demonstrates the minimal impact of the HammerDB client on system performance during TPROC-C benchmarking.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_09.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_09-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>For OLTP tests, using stored procedures is highly recommended to reduce overhead and simulate realistic transactional patterns. This drastically reduces network round-trips and improves efficiency.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_10-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Another important concept that catches out many benchmarking beginners is the concept of cached vs scaled workloads.\u00a0 HammerDB always recommends starting with a cached workload, this &#8216;sets the bar&#8217; for performance of\u00a0 a particular database and server.\u00a0 Advanced users can then scale an environment with HammerDB advanced features to match the cached performance.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_11-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<hr \/>\n<h2>Interfaces, Schema, and Configuration<\/h2>\n<p>HammerDB offers multiple user interfaces: a native UHD GUI for Windows and Linux, a web interface (CloudTk), and full command-line support for automation.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_13.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_13-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Schema creation is a streamlined process. HammerDB builds the tables, loads the data, creates indexes and stored procedures, and collects statistics with a single action. You can also perform schema checks to ensure consistency.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_14.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_14-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Schema builds are affected by CPU (on the client), I\/O (on the server), and network bandwidth if run remotely. For cloud-native benchmarks, it&#8217;s also possible to generate data into flat files and upload to the target system.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_17.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_17-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>One common question is how many warehouses to configure. For most benchmarks, only a subset of warehouses are used as virtual user primarily accesses one warehouse. This keeps the data &#8220;hot&#8221; for a cached workload.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_15-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>However, advanced scenarios like full-warehouse access allow for distributed I\/O stress testing, especially in cloud environments.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_16.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_16-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<hr \/>\n<h2>Running Benchmarks and Automating Workloads<\/h2>\n<p>HammerDB supports flexible test configuration via driver scripts. These can be used to perform quick functional tests or timed runs that simulate production workloads. Test durations, ramp-up periods, and concurrency levels are easily configured.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_18.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_18-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>While the GUI offers one-click test execution, automation for advanced users is where HammerDB excels. Using Tcl, Python, Bash, or PowerShell, entire workloads from schema creation to results capture can be scripted and run as part of CI pipelines. Docker images also enable HammerDB to be run in such environments in a self-contained environment.<\/p>\n<p>Driver scripts offer flexible execution: quick test scripts, timed runs with ramp-up, and advanced custom options.<\/p>\n<p>Running a test captures performance metrics and transactions over time.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_19.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_19-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Results are logged to a SQLite database, accessible via GUI or CLI.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_20.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_20-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>A complete command-line test run can be built using Tcl or Python script to define connection and workload parameters and iteratively run performance profiles.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_21.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_21-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<hr \/>\n<h2>Performance Analysis and Result Interpretation<\/h2>\n<p>Each benchmark run is recorded as a job in the SQLite repository, enabling traceable, repeatable testing. HammerDB can sequence multiple jobs in an automated profile to discover scalability limits and performance plateaus. This helps expert performance engineers evaluate how well the database handles increasing user loads.<\/p>\n<p>Job summaries and individual run details are available in the UI and exported formats, providing a clear view of performance characteristics.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_23.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_23-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Arguably, the most common database benchmarking error in OLTP environments is to run a single benchmark test and extrapolate the results to compare databases. This is where the performance profile is key. Automated job sequences increment virtual users to discover peak performance and scalability characteristics. Many database &#8216;scale&#8217; perform and scale differently on different hardware and what may perform well on one system may not perform well on another.\u00a0 The most important metric is peak performance and advanced users often observe how closely this correlates with physical and logical CPU counts.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_24.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_24-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>HammerDB reports two main performance indicators:<\/p>\n<ul>\n<li><strong>NOPM<\/strong> (New Orders Per Minute) comparable across engines, approximates official tpmC scores.<\/li>\n<li><strong>TPM<\/strong> (Transactions Per Minute) measures internal engine activity, only comparable within the same engine.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_25.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_25-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<p>Job detail output provides insights into performance at individual run levels for tuning and analysis.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_26.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_26-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<hr \/>\n<h2>Oracle Workloads and Future Plans<\/h2>\n<p>HammerDB continues to expand its capabilities. A key planned enhancement area\u00a0 is the Oracle workload replay feature, whereby Oracle trace files can be converted and run against a database for a bespoke test workload.<\/p>\n<p>HammerDB Oracle functionality also includes an Active Session History (ASH) viewer for monitoring database performance over time. Active Session History is also supported for PostgreSQL.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_28.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1868\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2025\/07\/slide_28-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" \/><\/a><\/p>\n<hr \/>\n<h2>Final Thoughts: Hardware and Transparency<\/h2>\n<p>Database performance is never just about the database engine. Hardware configurations including CPU topology, memory layout, I\/O subsystems, and networking play a decisive role and only holistic testing of the entire system with a tool that is proven to scale such as HammerDB can accurately reveal the weak spots.<\/p>\n<p>Lastly, if someone has already performed relevant benchmarks (where permitted) reuse them and contribute your own results back to the community.<\/p>\n<p>HammerDB in the near future plans to support\u00a0 public uploads to the TPC to encourage transparency and shared learning.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;ve recently given presentations at MariaDB MeetUp days on the methodology for comparing open source and proprietary databases. As we&#8217;ve been asked numerous times for the slides in this post we provide the content and summary of the presentation. Benchmarking Performance Without Restrictions Sharing performance metrics for proprietary databases such as Oracle and SQL Server &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.hammerdb.com\/blog\/uncategorized\/how-to-compare-open-source-and-proprietary-databases-with-hammerdb\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;How to Compare Open Source and Proprietary Databases with HammerDB&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"ppma_author":[5],"class_list":["post-1850","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"authors":[{"term_id":5,"user_id":2,"is_guest":0,"slug":"hammerdb","display_name":"HammerDB","avatar_url":{"url":"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2018\/10\/logo-white.png","url2x":"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2018\/10\/logo-white.png"},"author_category":"","user_url":"http:\/\/www.hammerdb.com","last_name":"","first_name":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/1850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/comments?post=1850"}],"version-history":[{"count":22,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/1850\/revisions"}],"predecessor-version":[{"id":1908,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/1850\/revisions\/1908"}],"wp:attachment":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/media?parent=1850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/categories?post=1850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/tags?post=1850"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}