【问题标题】:Mariadb performance issues between 10.0 and 10.4Mariadb 10.0 和 10.4 之间的性能问题
【发布时间】:2020-09-02 19:24:47
【问题描述】:

我们目前在 Ubuntu 16.04 上运行 MariaDB 10.0,并希望在 18.04 上升级到 MariaDB 10.4,但我们遇到了一个奇怪的问题。在测试 10.0 与 10.4 的 vanilla 安装时,10.4 安装的性能在相同硬件上慢约 50%。我们在 GCP 2 核 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')))"

在 10.0 实例上运行大约需要 48 秒,但在 10.4 实例上运行大约需要 70 秒。我正在使用 htop、iostat 和 ioping 来监控系统,但我没有看到 CPU 或磁盘有任何压力。偶尔一个核心会达到 100%,但在大多数情况下,核心保持在 45% 左右。

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

【问题讨论】:

  • 附加信息请求数据来自 10.0.nn 和 10.4.nn RAM 大小、# 核心、MySQL 主机服务器上的任何 SSD 或 NVME 设备?在 pastebin.com 上发布并分享链接。从您的 SSH 登录根目录中,文本结果为:B) SHOW GLOBAL STATUS;至少 24 小时正常运行时间后 C) 显示全局变量; D) 显示完整的处理程序;和 可选的有用信息(如果可用)包括 - htop 或 top 用于大多数活动应用程序,ulimit -a 用于 Linux/Unix 限制列表,iostat -xm 5 3 用于按设备和核心/cpu 计数的 IOPS,用于服务器工作负载调整分析提供建议。

标签: performance mariadb upgrade


【解决方案1】:

糟糕的基准测试。除非你真的从 shell 脚本运行 mysql。没有区别

  • 操作系统更改
  • 外壳更改
  • 启动mysql
  • 在 mysql 中授予访问权限
  • 做一个微不足道的一行INSERT

通过连接一次,您将获得显着的加速。 通过批处理您插入的行,您将获得另一个显着的加速。 (在另一种情况下,我看到了 10 倍。)

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

【讨论】:

  • 我已经用存储过程测试了相同的插入,以尝试减少客户端并使用慢日志比较执行时间,我得到了相同的结果。我还在 Ubuntu 16.04 和 Mariadb 10.4 上运行它,看到了相同的结果,因此应该消除大部分变量。此外,使用它的应用程序正在执行大量单行插入,因此单次插入性能很重要。 Aria 是一个崩溃安全的 MyISAM 存储,因此它应该比 InnoDB 更快,但在使用 InnoDB 时它也更慢。
  • 您的应用是否像基准测试一样为每个 INSERT 创建新连接?
  • 不,但如前所述,我已经通过存储过程运行相同的过程,每次插入不会创建新连接,这给了我相同的结果。
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2020-07-11
  • 2011-07-03
  • 1970-01-01
相关资源
最近更新 更多