Skip to content

MariaDB

MariaDB Logo

Application Description

MariaDB is a fork of the MySQL relational database management system, so the database structure and indexes of MariaDB are the same as MySQL. MariaDB has a larger connection pool supporting up to 200,000+ connections whereas MySQL has smaller connection pool. MariaDB shows an improved speed when compared to MySQL.

Infrastructure Environment Tested

The MariaDB has been tested on the following setups:

Resource Value
Host OS Ubuntu 18.04
Kernel Version 4.15.0-45-generic
Package manager apt
Application version
Environments tested AWS r5.2xlarge, Sunlight 2xlarge,

Configuration and Setup Description

For the MariaDB the TPS and QPS as the key performance indicators could be affected by a number of factors, including the size of database, number of concurrent users and various database configurations, including buffer size as an important setting. The databases with difference size up to nearly 500GB are generated and tested. The benchmarking tool sysbench is used to generate the databases and run the stress test against the generated databases. The steps to deploy MariaDB server and run the tests are as follows.

Installation of MySQL server and utility tools

Running the following script in the host OS will install the MariaDB server and deploy the tools required to run the test against this MariaDB server.

  • mariadb_config.sql
GRANT ALL ON *.* TO 'sysadmin'@'localhost' IDENTIFIED BY 'sunlight' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit
  • mariadb_deploy.sh
sudo apt-get update
sudo apt-get install mariadb-server
sudo mysql_secure_installation
sudo mysql -h localhost -u root < mariadb_config.sql
sudo apt-get install unzip
sudo apt-get install sysbench
sudo mkdir /mysqlslap_tutorial
cd /mysqlslap_tutorial
sudo wget https://github.com/datacharmer/test_db/archive/master.zip
sudo unzip master.zip
cd test_db-master/
mysql -h localhost -u sysadmin -p -t < employees.sql

MariaDB Tuning

sudo mysql -h localhost -u root

Increase the maximum number of connections allowed

MariaDB [(none)]> show global variables like 'max_prepared_stmt_count';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| max_prepared_stmt_count | 16382 |
+-------------------------+-------+

Increase it to 10 times of the current value

MariaDB [(none)]> set global max_prepared_stmt_count=163820;
Query OK, 0 rows affected (0.00 sec)

Database preparation

The sysbench benchmarking tool with the following parameters will generate a database with 200 tables with 10,000,000 records in each table, which leads to around 500 GB data.

sysbench /usr/share/sysbench/oltp_read_write.lua --threads=6 --mysql-host=127.0.0.1 --mysql-user=sysadmin --mysql-password=sunlight --mysql-port=3306 --mysql-db=employees --db-driver=mysql --tables=200 --table-size=10000000 prepare

Running the test

The test is simulating a certain number of users to randomly read and write to the specified database for a period. The sysbench tool with the parameters below will act as 8 clients to read and write to the tables generated previously for 1200 seconds.

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-user=sysadmin --mysql-password=sunlight --mysql-port=3306 --mysql-db=employees --db-driver=mysql --tables=200 --table-size=10000000 --report-interval=10 --threads=8 --time=1200 run 2>&1

This test is performing read, write and other queries against the database with ratio of 70%, 20% and 10% respectively.

Data results table

Flavour Number of Tables Number of Threads QPS Latency in 95th percentile
AWS 2xlarge 200 8 2942.38 23.44
AWS r5.2xlarge + guaranteed IOPs 200 8 5302.2 47.47
Sunlight 2xlarge 200 8 13019.4 21.5

Each table has 10,000,000 records, which is around 2.5 GB data in storage. The results above is based on the sysbench test above against 200 tables (~ 500 GB). The results with different number of tables are illustrated in the following figures.

Performance graphs

MariaDB QPS

MariaDB latency