Performance 10.0和10.4之间的Mariadb性能问题

Performance 10.0和10.4之间的Mariadb性能问题,performance,mariadb,upgrade,Performance,Mariadb,Upgrade,我们目前正在Ubuntu 16.04上运行MariaDB 10.0,并希望在18.04升级到MariaDB 10.4,但我们遇到了一个奇怪的问题。在测试10.0和10.4的香草安装时,在相同硬件上,10.4安装的性能大约慢50%。我们在GCP2核心7GB虚拟机上运行这些 我在两个实例上都设置了一个测试表,如下所示: create table if not exists testinsert_aria ( id int primary key, descriptio

我们目前正在Ubuntu 16.04上运行MariaDB 10.0,并希望在18.04升级到MariaDB 10.4,但我们遇到了一个奇怪的问题。在测试10.0和10.4的香草安装时,在相同硬件上,10.4安装的性能大约慢50%。我们在GCP2核心7GB虚拟机上运行这些

我在两个实例上都设置了一个测试表,如下所示:

create table if not exists testinsert_aria
(
        id int primary key,
        description varchar(255),
        colorder int
) engine=aria;
#!/bin/bash
START_DATE=`date`
END_DATE=`date`
START_ID=0
IDX=0

while [ $START_ID -lt 10001 ]
do
        START_ID=$[$START_ID+1]
        SQL_CMD="echo \"insert into testinsert_aria values($START_ID,'this is a test',1)\" | mysql -uroot testdb"
        eval $SQL_CMD
done
END_DATE=`date`
echo "$(($(date -d "$END_DATE" '+%s') - $(date -d "$START_DATE" '+%s')))"
并设置如下所示的测试脚本:

create table if not exists testinsert_aria
(
        id int primary key,
        description varchar(255),
        colorder int
) engine=aria;
#!/bin/bash
START_DATE=`date`
END_DATE=`date`
START_ID=0
IDX=0

while [ $START_ID -lt 10001 ]
do
        START_ID=$[$START_ID+1]
        SQL_CMD="echo \"insert into testinsert_aria values($START_ID,'this is a test',1)\" | mysql -uroot testdb"
        eval $SQL_CMD
done
END_DATE=`date`
echo "$(($(date -d "$END_DATE" '+%s') - $(date -d "$START_DATE" '+%s')))"
在10.0实例上,这大约需要48秒,但在10.4实例上大约需要70秒。我使用htop、iostat和ioping来监视系统,我没有看到CPU或磁盘上有任何压力。偶尔一个核心会达到100%,但大部分核心保持在45%左右


与Mariadb相比,我对SQL Server更为熟悉,但是对于aria引擎,似乎没有太多的调优选项。我发现innodb引擎也存在同样的问题。我也在Ubuntu 16.04上用Mariadb 10.4对它进行了测试,看到了相同的结果,因此它似乎与操作系统无关。我使用的是一个单独的数据SSD数据磁盘,该磁盘是用XFS设置的(也尝试了EXT4,但没有重大区别)。我玩过IO调度程序,没有看到任何差异。我有点不知道发生了什么事。我可以想象,如果10.0和10.4之间有这么大的性能差异,会有很多线程,但我找不到任何东西。我也在一个存储过程中表达了这个测试来删除客户端,结果仍然是一样的。通过slow_日志查看10.4实例时,其平均查询时间大约要长3倍,而查询_响应_时间也显示相同的情况。任何帮助都将不胜感激。

糟糕的基准测试。除非您真的从shell脚本运行mysql。这是不区分的

  • 操作系统更改
  • 外壳变化
  • 启动mysql
  • 在mysql中授予访问权限
  • 做一个简单的一行插入
通过连接一次,您将获得显著的加速。 通过对插入的行进行批处理,您将获得另一个显著的加速。(在另一方面,我看到了10倍。)


我不知道Engine=Aria是否比标准InnoDB差,但这可能是另一回事。

其他信息请求MySQL主机服务器上的10.0.nn和10.4.nn RAM大小、内核、任何SSD或NVME设备的数据?在pastebin.com上发布并共享链接。从SSH登录根目录中,文本结果为:B)显示全局状态;至少24小时正常运行后C)显示全局变量;D) 显示完整的进程列表;以及可选的有用信息,如果可用,包括-htop或top(适用于大多数活动应用程序)、ulimit-a(适用于Linux/Unix限制列表)、iostat-xm 5 3(适用于按设备和核心/cpu计数划分的IOPS),为服务器工作负载优化分析提供建议。我还使用存储过程测试了相同的插入,以尝试减少客户端,并使用慢速日志比较了执行时间,得到了相同的结果。我还用Ubuntu 16.04和Mariadb 10.4运行了它,并看到了相同的结果,因此应该可以消除大部分这些变量。此外,使用此功能的应用程序正在执行大量单行插入,因此单插入性能非常重要。Aria是一个崩溃安全的MyISAM存储,因此它应该比InnoDB快,但在使用InnoDB时速度也慢。你的应用程序是否像基准一样为每个插入创建新连接?没有,但如前所述,我通过一个存储过程运行了相同的过程,它不会为每个插入创建新连接,这给了我相同的结果。