MySQL 5.5和MariaDB5.5为相同的数据和相同的select查询返回不同数量的列?

我一直在寻找networking一段时间,似乎无法find这种情况下的答案。 如果我能得到一些build议,将不胜感激。 简而言之就是这个问题。

我们有2台服务器。 一个在centos6 / mysql5.5上运行12个cpu核心和24GB ram,第二个在centos7 / mariadb5.5上运行24个cpu核心和32GB ram。 两者在dbms中都有相同的数据; 它使用mysqldump从mysql55复制,并导入到mariadb5.5。 mysql和mariadb的configuration也被从较小的系统复制到较大的系统; 它是完全相同的。

第一个问题是在相同的负载下, mysql5.5按照预期的方式执行load avrg。 大约4到8; mariadb5.5执行得非常糟糕,平均负载为700到900. mariadb系统上的命令“show process list”使大量长时间运行超过5分钟的连接处于“Copy to tmp table”状态。 相同的查询在较小的系统mysql5.5上可见,但是它们在1-2秒内执行。

我试图用大型内存分区上创build的tmpdir运行maraidb。 这减less了负荷,但没有太多,最终回到了700。

我注意到的第二件事是,如果我解释一个长时间运行的查询,那么从mysql返回大约3k行,而另一个服务器在相同的查询上解释相同的返回大约7k行。

我不确定是什么原因造成的。 查询主要是“select”与“和”和“或”。

感谢您的时间。 我将不胜感激这方面的任何投入。

在进一步比较两个系统中最长的运行查询的解释之后,我发现运行mariadb的服务器在执行操作时没有使用join_buffer。

当我寻找可能的原因时,我发现这个variables:

https://mariadb.com/kb/en/mariadb/server-system-variables/#join_cache_level

果然把这个从默认值2改为8后, 所以我们允许dbms在执行连接操作时可以从中select更多的基于bloack的algorithm。 我不是数据库专家,也不完全确定这个行动的后果是什么。 我怀疑内存占用会有所增加,但是性能方面似乎让这个盒子“飞”起来。 现在平均负载从1200降到5

我的情况似乎是孤立的,因为我正在运行的应用程序正在做一些非常长的select与多个连接。 但我想这个行为对任何一个mysql来说都是相同的sql工作负载的mariadb转换。

我在Centos 7 linux下使用mariadb 10。 它工作良好,因为默认情况下数据库存储每个文件的每个表和每个文件的索引。 检查是否为“where”和“join on”子句中使用的字段创build索引。 索引字段的正确select可能会使您的性能提高超过100倍。 如何在Centos 7上安装mariadb 10,你可以在那里findhttps://mariadb.com/kb/en/mariadb/yum/