MariaDB vs MySQL short benchmark

Submit to reddit

Considering switching from MySQL to MariaDB? Me too. I wanted to see if I can look towards any performance improvements (or drops). I don’t have high level needs, I’m sure more comprehensive tests exist. This is simple run-all-tests.pl from sql-bench suite. The test machine was a CentOS VM with 2Gb RAM and 2 CPU cores assigned.

Mysql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Benchmark DBD suite: 2.15
Date of test:        2011-05-25  2:22:27
Running tests on:    Linux 2.6.18-238.el5 x86_64
Arguments:
Comments:
Limits from:
Server version:      MySQL 5.0.77/
Optimization:        None
Hardware:

alter-table: Total time:  7 wallclock secs ( 0.05 usr  0.02 sys +  0.00 cusr  0.00 csys =  0.07 CPU)
ATIS: Total time: 12 wallclock secs ( 3.66 usr  0.51 sys +  0.00 cusr  0.00 csys =  4.17 CPU)
big-tables: Total time:  9 wallclock secs ( 1.88 usr  0.48 sys +  0.00 cusr  0.00 csys =  2.36 CPU)
connect: Total time: 107 wallclock secs (25.93 usr 15.66 sys +  0.00 cusr  0.00 csys = 41.59 CPU)
create: Failed (output/create-mysql-Linux_2.6.18_238.el5_x86_64)
insert: Total time: 791 wallclock secs (257.43 usr 67.52 sys +  0.00 cusr  0.00 csys = 324.95 CPU)
select: Total time: 181 wallclock secs (21.49 usr  4.51 sys +  0.00 cusr  0.00 csys = 26.00 CPU)
transactions: Test skipped because the database doesn't support transactions
wisconsin: Total time:  8 wallclock secs ( 1.56 usr  0.50 sys +  0.00 cusr  0.00 csys =  2.06 CPU)

Of 9 tests, 1 tests didn'
t work

Totals per operation:
Operation             seconds     usr     sys     cpu   tests
alter_table_add                        2.00    0.01    0.00    0.01     100
alter_table_drop                       3.00    0.02    0.01    0.03      91
connect                                9.00    3.34    2.35    5.69   10000
connect+select_1_row                  11.00    3.45    2.38    5.83   10000
connect+select_simple                 11.00    4.60    2.54    7.14   10000
count                                  3.00    0.03    0.01    0.04     100
count_distinct                         5.00    0.08    0.06    0.14    1000
count_distinct_2                       8.00    0.10    0.03    0.13    1000
count_distinct_big                    10.00    2.55    0.04    2.59     120
count_distinct_group                   7.00    0.50    0.06    0.56    1000
count_distinct_group_on_key            6.00    0.12    0.02    0.14    1000
count_distinct_group_on_key_parts      6.00    0.41    0.06    0.47    1000
count_distinct_key_prefix              3.00    0.15    0.05    0.20    1000
count_group_on_key_parts               6.00    0.37    0.05    0.42    1000
count_on_key                          48.00    4.76    0.92    5.68   50100
create_index                           1.00    0.00    0.00    0.00       8
create_table                           0.00    0.01    0.01    0.02      31
delete_all_many_keys                  13.00    0.01    0.00    0.01       1
delete_big                             0.00    0.00    0.00    0.00       1
delete_big_many_keys                  13.00    0.01    0.00    0.01     128
delete_key                             2.00    0.16    0.24    0.40   10000
delete_range                           2.00    0.01    0.00    0.01      12
drop_index                             0.00    0.00    0.00    0.00       8
drop_table                             0.00    0.00    0.00    0.00      28
insert                                60.00    6.77    4.48   11.25  350768
insert_duplicates                     10.00    2.44    1.05    3.49  100000
insert_key                            30.00    3.36    1.45    4.81  100000
insert_many_fields                     2.00    0.13    0.13    0.26    2000
insert_select_1_key                    1.00    0.00    0.00    0.00       1
insert_select_2_keys                   1.00    0.00    0.00    0.00       1
min_max                                2.00    0.01    0.00    0.01      60
min_max_on_key                        23.00    9.25    3.33   12.58   85000
multiple_value_insert                  1.00    0.12    0.00    0.12  100000
once_prepared_select                  18.00    4.98    1.60    6.58  100000
order_by_big                           8.00    6.68    0.11    6.79      10
order_by_big_key                       8.00    6.96    0.17    7.13      10
order_by_big_key2                      7.00    6.80    0.15    6.95      10
order_by_big_key_desc                  8.00    7.07    0.16    7.23      10
order_by_big_key_diff                  8.00    6.73    0.12    6.85      10
order_by_big_key_prefix                8.00    6.84    0.13    6.97      10
order_by_key2_diff                     2.00    0.79    0.04    0.83     500
order_by_key_prefix                    1.00    0.45    0.02    0.47     500
order_by_range                         1.00    0.45    0.03    0.48     500
outer_join                            10.00    0.00    0.01    0.01      10
outer_join_found                      10.00    0.01    0.00    0.01      10
outer_join_not_found                   7.00    0.00    0.00    0.00     500
outer_join_on_key                      7.00    0.00    0.00    0.00      10
prepared_select                       31.00   12.21    3.62   15.83  100000
select_1_row                          10.00    2.31    0.90    3.21  100000
select_1_row_cache                    11.00    2.14    1.12    3.26  100000
select_2_rows                         11.00    2.49    1.01    3.50  100000
select_big                             9.00    6.78    0.16    6.94      80
select_big_str                         5.00    2.69    0.40    3.09   10000
select_cache                          23.00    0.88    0.15    1.03   10000
select_cache2                         22.00    0.88    0.11    0.99   10000
select_column+column                  14.00    1.84    1.04    2.88  100000
select_diff_key                        0.00    0.05    0.05    0.10     500
select_distinct                        3.00    0.70    0.06    0.76     800
select_group                           8.00    0.56    0.17    0.73    2911
select_join                            1.00    0.19    0.01    0.20     100
select_key                            59.00   23.49    5.84   29.33  200000
select_key2                           68.00   26.43    8.40   34.83  200000
select_key2_return_key                56.00   22.67    6.04   28.71  200000
select_key2_return_prim               68.00   25.13    8.13   33.26  200000
select_key_prefix                     72.00   28.90    8.34   37.24  200000
select_key_prefix_join                 3.00    1.68    0.02    1.70     100
select_key_return_key                 65.00   30.92    8.43   39.35  200000
select_many_fields                     7.00    1.75    0.35    2.10    2000
select_range                          27.00    3.05    0.09    3.14     410
select_range_key2                      8.00    2.66    0.76    3.42   25010
select_range_prefix                    8.00    2.62    0.65    3.27   25010
select_simple                         13.00    1.67    2.12    3.79  100000
select_simple_cache                   12.00    1.40    1.80    3.20  100000
select_simple_join                     0.00    0.28    0.03    0.31     500
update_big                             9.00    0.00    0.00    0.00      10
update_of_key                          7.00    1.24    0.52    1.76   50000
update_of_key_big                      4.00    0.02    0.02    0.04     501
update_of_primary_key_many_keys        5.00    0.01    0.00    0.01     256
update_with_key                       47.00    6.28    3.86   10.14  300000
update_with_key_prefix                22.00    2.51    2.91    5.42  100000
wisc_benchmark                         1.00    0.99    0.07    1.06     114
TOTALS                              1111.00  307.95   88.99  396.94 3375950

MariaDB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Benchmark DBD suite: 2.15
Date of test:        2011-05-25  3:26:59
Running tests on:    Linux 2.6.18-238.el5 x86_64
Arguments:
Comments:
Limits from:
Server version:      MySQL 5.2.6 MariaDB mariadb101/
Optimization:        None
Hardware:

alter-table: Total time:  8 wallclock secs ( 0.04 usr  0.01 sys +  0.00 cusr  0.00 csys =  0.05 CPU)
ATIS: Total time: 12 wallclock secs ( 3.87 usr  0.42 sys +  0.00 cusr  0.00 csys =  4.29 CPU)
big-tables: Total time:  8 wallclock secs ( 2.11 usr  0.40 sys +  0.00 cusr  0.00 csys =  2.51 CPU)
connect: Total time: 101 wallclock secs (29.79 usr 15.16 sys +  0.00 cusr  0.00 csys = 44.95 CPU)
create: Failed (output/create-mysql-Linux_2.6.18_238.el5_x86_64)
insert: Total time: 736 wallclock secs (240.44 usr 50.84 sys +  0.00 cusr  0.00 csys = 291.28 CPU)
select: Total time: 216 wallclock secs (23.22 usr  4.85 sys +  0.00 cusr  0.00 csys = 28.07 CPU)
transactions: Test skipped because the database doesn't support transactions
wisconsin: Total time:  6 wallclock secs ( 1.72 usr  0.37 sys +  0.00 cusr  0.00 csys =  2.09 CPU)

Of 9 tests, 1 tests didn'
t work

Totals per operation:
Operation             seconds     usr     sys     cpu   tests
alter_table_add                        3.00    0.02    0.00    0.02     100
alter_table_drop                       3.00    0.01    0.00    0.01      91
connect                               10.00    4.42    1.86    6.28   10000
connect+select_1_row                  12.00    3.99    2.37    6.36   10000
connect+select_simple                 11.00    3.84    2.35    6.19   10000
count                                  4.00    0.02    0.01    0.03     100
count_distinct                         6.00    0.12    0.05    0.17    1000
count_distinct_2                       9.00    0.16    0.06    0.22    1000
count_distinct_big                    10.00    2.65    0.03    2.68     120
count_distinct_group                   6.00    0.47    0.06    0.53    1000
count_distinct_group_on_key            7.00    0.12    0.02    0.14    1000
count_distinct_group_on_key_parts      7.00    0.47    0.09    0.56    1000
count_distinct_key_prefix              4.00    0.12    0.06    0.18    1000
count_group_on_key_parts               8.00    0.41    0.05    0.46    1000
count_on_key                          68.00    5.19    0.99    6.18   50100
create_index                           1.00    0.00    0.00    0.00       8
create_table                           0.00    0.00    0.01    0.01      31
delete_all_many_keys                  13.00    0.02    0.00    0.02       1
delete_big                             0.00    0.00    0.00    0.00       1
delete_big_many_keys                  13.00    0.02    0.00    0.02     128
delete_key                             2.00    0.43    0.30    0.73   10000
delete_range                           3.00    0.00    0.00    0.00      12
drop_index                             1.00    0.00    0.00    0.00       8
drop_table                             0.00    0.00    0.00    0.00      28
insert                                48.00    8.87    4.79   13.66  350768
insert_duplicates                     16.00    3.63    1.71    5.34  100000
insert_key                            33.00    3.86    1.82    5.68  100000
insert_many_fields                     2.00    0.07    0.05    0.12    2000
insert_select_1_key                    1.00    0.00    0.00    0.00       1
insert_select_2_keys                   2.00    0.00    0.00    0.00       1
min_max                                4.00    0.01    0.01    0.02      60
min_max_on_key                        23.00    9.33    2.83   12.16   85000
multiple_value_insert                  1.00    0.12    0.00    0.12  100000
once_prepared_select                  24.00    5.06    1.89    6.95  100000
order_by_big                           8.00    6.79    0.12    6.91      10
order_by_big_key                       8.00    7.03    0.17    7.20      10
order_by_big_key2                      7.00    6.85    0.09    6.94      10
order_by_big_key_desc                  9.00    7.05    0.16    7.21      10
order_by_big_key_diff                  9.00    6.78    0.10    6.88      10
order_by_big_key_prefix                8.00    6.86    0.11    6.97      10
order_by_key2_diff                     2.00    0.79    0.03    0.82     500
order_by_key_prefix                    1.00    0.46    0.02    0.48     500
order_by_range                         1.00    0.43    0.02    0.45     500
outer_join                            11.00    0.00    0.00    0.00      10
outer_join_found                       9.00    0.01    0.00    0.01      10
outer_join_not_found                   8.00    0.00    0.00    0.00     500
outer_join_on_key                      7.00    0.00    0.00    0.00      10
prepared_select                       26.00   10.27    2.47   12.74  100000
select_1_row                          11.00    3.02    1.34    4.36  100000
select_1_row_cache                    10.00    2.31    1.10    3.41  100000
select_2_rows                         10.00    2.65    0.94    3.59  100000
select_big                             8.00    6.89    0.17    7.06      80
select_big_str                         4.00    1.36    0.70    2.06   10000
select_cache                          26.00    1.05    0.18    1.23   10000
select_cache2                         25.00    1.03    0.19    1.22   10000
select_column+column                  11.00    2.61    0.87    3.48  100000
select_diff_key                        0.00    0.06    0.03    0.09     500
select_distinct                        3.00    0.73    0.04    0.77     800
select_group                          10.00    0.72    0.16    0.88    2911
select_join                            1.00    0.22    0.01    0.23     100
select_key                            70.00   26.28    7.84   34.12  200000
select_key2                           48.00   21.32    3.43   24.75  200000
select_key2_return_key                60.00   24.12    5.96   30.08  200000
select_key2_return_prim               51.00   21.54    4.22   25.76  200000
select_key_prefix                     47.00   20.75    3.57   24.32  200000
select_key_prefix_join                 3.00    1.67    0.02    1.69     100
select_key_return_key                 56.00   23.19    5.72   28.91  200000
select_many_fields                     6.00    2.04    0.35    2.39    2000
select_range                          31.00    3.13    0.08    3.21     410
select_range_key2                      6.00    2.10    0.38    2.48   25010
select_range_prefix                    8.00    2.31    0.58    2.89   25010
select_simple                         11.00    2.70    1.92    4.62  100000
select_simple_cache                   11.00    2.89    1.71    4.60  100000
select_simple_join                     0.00    0.25    0.04    0.29     500
update_big                             9.00    0.00    0.00    0.00      10
update_of_key                          8.00    1.42    0.69    2.11   50000
update_of_key_big                      6.00    0.02    0.01    0.03     501
update_of_primary_key_many_keys        5.00    0.01    0.01    0.02     256
update_with_key                       44.00    7.05    3.74   10.79  300000
update_with_key_prefix                14.00    3.85    1.03    4.88  100000
wisc_benchmark                         2.00    1.02    0.08    1.10     114
TOTALS                              1084.00  297.06   71.81  368.87 3375950

So as you can see not much incentive here. I know that for advanced use cases MariaDB offers some new features and improvements but for a normal use case as for example the web server hosting this site there’s no major advantage.

  • The major advantage of switching to MariaDB is that your LAMP stack becomes fully open source again. Similar to how LibreOffice is gradually being used as substitute for OpenOffice, I expect MariaDB to eventually become the de facto standard MySQL implementation.

  • You are of course completly right. I was simply comparing the performance because should it offered increased performance it would have made the hassle of switching worth it. Like this I will wait for it to enter in my distro’s repos – or at least a repo I trust.

  • Erick The Red

    According to MariaDB’s documentation, each release is a drop in replacement for the same version of MySQL.  In your benchmark you are comparing MySQL 5.0.77 with MariaDB 5.2.6.  You should have used the same version for MySQL and MariaDB.

    • Thanks for pointing that out. Your point is valid and I’ll see if I find the time to redo the tests.