差的mariadb性能vs mysql

时间:2018-06-07 15:33:20

标签: mysql performance mariadb

我听说Mariadb的性能比mysql好,所以我用他的整个数据库克隆了一个网站来比较2的差异。

实际上,一切缓存似乎更快,但是当没有缓存时我输出非常奇怪,在一些大的请求上,mariadb远比mysql差:

MariaDB> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (10.13 sec)

mysql> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (0.76 sec)

这是一个巨大的差异,怎么可能?

完整查询如下所示:

SELECT 
    SQL_NO_CACHE [...] 
FROM 
    table1
WHERE
    field1 = 'val1' and
    field2 = 'val2' and
    (field3='val3' or INSTR(field3, 'val3'))
ORDER BY field4 DESC LIMIT 0, 200;

以下是请求的说明:

+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
| id | select_type | table    | type | possible_keys            | key     | key_len | ref   | rows   | Extra                       |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
|  1 | SIMPLE      | table1   | ref  | field1,field3            | field1  | 123     | const | 125832 | Using where; Using filesort |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+

2 个答案:

答案 0 :(得分:3)

除了获取时间,在两个环境中运行EXPLAIN并进行比较。也许MariaDB正在使用不同的索引,或进行全面扫描。也许InnoDB统计数据不是最新的......向MariaDB优化器表明,当表不是时,表是空的。

如果有这么大的差异,我倾向于认为I / O可能是一个贡献者。

也许InnoDB缓冲池在MySQL实例上要比在Mariadb实例上大得多。 (这不是一个明确的诊断。这只是我会考虑的事情。

我会查看InnoDB缓冲区缓存的大小和存储架构,并验证它们在两台服务器上是否相同。

在比较性能时,我会在每个实例上多次运行相同的查询,抛弃第一次执行的时间,并平均剩余的时间。

说“用他的整个数据库克隆”让我们相信数据库的所有内容都是相同的,相同的存储引擎,相同的索引,相同的字符集和字符列的排序,等效的数据库配置等等。但也许我们的信念是不合理的。

答案 1 :(得分:1)

很难说这是一个测试用例错误,还是分支之间存在很大差异。我会谈论一些可能性(除Spencer之外):

请提供SHOW CREATE TABLE

两台服务器都需要

INDEX(field1, field2, field4)

1和2可以按任意顺序排列; 4需要持久。

有没有子查询?这是MySQL和MariaDB显着分歧的一个领域。

OR是性能杀手;您想帮助使用UNION吗?

我的一个经验法则是缓存产生10倍的差异。这两个时间相差大约10倍。是不是MySQL正在使用热缓存?简单的测试是两次运行两次,然后进行第二次。

MySQL和MariaDB的哪些版本?他们的优化者开始以5.6 / 10.0的速度进行重大改道。我已经看到了很大的时间差异无论哪种方式。 (并且跟踪帮助的优化器功能并不总是很容易。)

是否涉及虚拟或生成列?这是另一个重大分歧的领域。还是JSON?我已经问过SHOW CREATE TABLE了吗?