执行多个单独的 MySQL 查询时速度极慢

执行多个单独的 MySQL 查询时速度极慢

我注意到我的一台运行 Apache/PHP/MySQL 的服务器存在性能问题。

因此我决定调查并针对其他服务器进行测试。

我做了什么?

在三台不同的服务器中,我创建了一个数据库(db_sandbox),单数据库桌子 (表沙箱),共 4 列(ID(整数),标题(varchar 255),描述(文本),日期(时间戳))。笔记: ID是具有自动增量的主键。

我创建了一个简单的 PHP 例程,将 15,000 条记录放入此表,以 5,000 条为一组,使用 3 种不同的方法:

  • 方法 1:5,000 条插入命令,每条命令都通过 5,000 个单独查询进行单独处理
  • 方法 2:在一次对 DB 的调用中插入 5.000 条命令,以分号分隔。
  • 方法 3:1 个插入 5,000 条记录的命令。

首先,从性能上看,方法2和方法3显然是最好的。但这不是重点。在现实世界中,方法2和方法3只是理想情况,很少发生。

无论如何,当我比较每个结果时,我感到很惊讶。考虑到 SERVER-1 是我的问题服务器,我得到了以下结果:

  • 方法 1:SERVER-2 是速度快 165 倍SERVER-3 是速度快 40 倍
  • 方法 2:SERVER-2 是6倍速度更快,SERVER-3速度快 7 倍
  • 方法 3:SERVER-2 是慢 5%SERVER-3 是速度快 1.5 倍

我的结论是,SERVER-1 的设置中存在一些影响多个单独查询的运行的问题。

有谁知道它们可能是什么设置?

服务器1:这是一个虚拟机

  • 英特尔至强 E5-2630 v3 2.4GHz
  • 16GB 内存
  • 固态硬盘 120GB
  • Windows Server 2012 R2
  • MySQL 5.6
  • 虚拟机

服务器-2

  • 英特尔至强X3360 2.83GHz
  • 4GB 内存
  • 固态硬盘 250GB
  • Windows Server 2003(准备退役)
  • MySQL 5.0

服务器-3

  • 英特尔 I7-3770 3.4GHz
  • 16GB 内存
  • 固态硬盘 120GB
  • Windows 8.1 专业版
  • MySQL 5.6

笔记:我比较过我的配置文件服务器-1服务器-3而且它们实际上是完全相同的。服务器-2, 跑步Mysql 5.0非常不同。

答案1

如果我读完并理解了您的问题,您正在比较在 ESXi 上运行的 Windows VM 中获得的结果与在裸机上运行操作系统的服务器 2 和 3 中获得的结果。

只要硬件保持相似,您就不可能在虚拟机上看到更好的性能。

裸机数据库服务器总是会更快。你排队的磁盘写入越多,这最后一句话就越正确。

减慢 Server1 上插入速度的可能是虚拟化层,并且有大量文献讨论在性能很重要的情况下不应该虚拟化什么。

此外,在没有闪存缓存硬件 raid 控制器的 ESXi 上尤其如此。

答案2

经过大量测试和尝试不同的组合后,我不能说我找到了完美的解决方案,其中可能包括我的 IT 人员找不到的一些 VM 设置。无论如何,以下是真正对性能产生影响的两件事(请记住,这仅适用于数据库引擎):

1-使用事务,即关闭自动提交,执行所有事务,并在最后提交。

2 - 你可以通过设置获得巨大的性能提升innodb-在trx提交时刷新日志0或者1。请阅读完整文档了解此行为的后果。

我希望它能够帮助其他人。

相关内容