与我的本地开发机器相比,我有一个查询在我的暂存服务器上运行速度慢 5 倍。
Stackoverflow 不想很好地处理格式;查询、描述和解释位于 here
查看 describe
语句,我看不出本地和远程模式之间有任何区别。
两台机器的记录数在同一数量级(500k 对 600k)
根据评论进行编辑
将查询放入 MySQL Workbench 并查看查询时间是我非常不科学的方法。本地查询时间约为 1.3 秒,远程查询时间约为 5.2 秒(因此慢了 4 倍)。我确信有更好的方法来测试这个查询时间。
机器不同。我的开发机器是一台 Mac Book Pro,配备 8 GB RAM。登台服务器是具有 512 兆字节 RAM 的 linode VPS。登台服务器上不应该有太多负载(我是唯一一个使用它的人)。我注意到大多数查询在本地机器和登台服务器上的运行时间大致相同,所以我很困惑为什么这个查询的时间范围如此截然不同。
RAM 问题
由于未使用临时表(EXPLAINS
中未提及),RAM 量是否仍然是个问题?
免费
的输出
total used free shared buffers cached
Mem: 508576 453880 54696 0 4428 254200
-/+ buffers/cache: 195252 313324
Swap: 262140 19500 242640
分析添加到 Gist
看起来远程“发送数据”需要 2.5 秒,而本地只需要 0.5 秒。这是 I/O 问题吗? (要点中的完整分析信息)
最佳答案
您的暂存服务器的 RAM 是 Mac Book Pro 的十六分之一。
在不知道您的两个 MySQL 实例有多少 RAM 可用的情况下,很难确定,但这是我首先要查看的地方。
此外,如果您从 MySQL 命令行在本地运行这些查询,时间比较如何? 时间的增加可能是网络传输而不是查询处理。
实际上...网络传输时间是我首先要查看的地方...然后是 MySQL 内存使用情况。
编辑问题更新
“发送数据”阶段是服务器向客户端发送数据的阶段ref .我不知道你的数据集到底有多大,但 2.5 秒对于大约 50kB 的数据来说似乎相当高。 查看分析数据,几乎所有时间都花在发送数据上,所以我强烈怀疑这里的网络。
编辑2
一些研究让我找到了 this page这表明“发送数据”具有误导性,并且这实际上是执行查询所花费的时间。
因此,我真的认为您需要查看服务器上的 CPU 和内存使用情况,因为它的规范水平远低于您的 MacBook。
关于MySQL 查询在登台服务器上的运行速度比本地开发机器慢 5 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13846723/