1

我有一个查询在我的登台服务器上运行慢 5 倍,而不是我的本地开发机器。

Stackoverflow 不想很好地处理格式;查询、描述和解释位于此处

查看describe语句,我看不出本地模式和远程模式之间有任何区别。

2 台机器的记录数处于同一数量级(500k 与 600k)

编辑以回应评论

这是我将查询放入 MySQL Workbench 并查看查询时间的非常不科学的方法。本地查询时间大约为 1.3 秒,远程查询时间大约为 5.2 秒(因此慢了 4 倍)。我确信有更好的方法来测试这个查询时间。

机器不一样。我的开发机器是一台配备 8 GB RAM 的 Mac Book Pro。登台服务器是一个具有 512 兆 RAM 的 linode VPS。登台服务器上不应该有太多负载(我是唯一使用它的人)。我注意到大多数查询在本地机器和登台服务器上几乎在相同的时间范围内运行,所以我很困惑为什么这个查询有如此截然不同的时间范围。

内存问题

由于没有使用临时表(在 中没有提及EXPLAINS),RAM 的数量仍然是一个问题吗?

输出自free

             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 问题吗?(要点中的完整分析信息)

4

1 回答 1

4

您的登台服务器的 RAM 是 Mac Book Pro 的十六分之一。

在不知道您的两个 MySQL 实例有多少 RAM 可用的情况下,很难确定,但这是我首先要看的地方。

此外,如果您在本地从 MySQL 命令行运行这些查询,时间比较如何?时间的增加可能是网络传输而不是查询处理。

实际上...网络传输时间是我首先要看的地方...然后是 MySQL 内存使用情况。

编辑以下问题更新

“发送数据”阶段是服务器向客户端ref发送数据的阶段。我不知道你的数据集到底有多大,但是对于大约 50kB 的数据来说,2.5s 似乎相当高。查看分析数据后,几乎所有时间都花在发送数据上,所以我强烈怀疑这里的网络。

编辑 2

一些研究将我带到此页面,该页面表明“发送数据”具有误导性,这实际上是执行查询所花费的时间。

因此,我真的认为您需要查看服务器上的 CPU 和内存使用情况,因为它的规格比您的 MacBook 低得多。

于 2012-12-12T19:26:03.587 回答