MySQL 查询在登台服务器上的运行速度比本地开发机器慢 5 倍

标签 mysql performance indexing

与我的本地开发机器相比,我有一个查询在我的暂存服务器上运行速度慢 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/

相关文章:

mysql - INDEX Mysql for 字符串

string - Clojure:为什么字符串上的 = 和 .equals 有不同的性能?

mysql - sql 查询计数非常慢

indexing - 如何避免使用负值?

sql - 为什么 Oracle 隐式地将 SYS_EXTRACT_UTC 添加到索引中?

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'day0_.calendar_id' in 'field list'

mysql 如何在值等于 X 时选择一个 ID

java - 计算 int 在数组中出现的次数(Java)

mysql - 将 Ruby/Rails/MRI 应用程序移植到 JRuby

javascript - 我应该创建一个标量/数字类来防止浮点错误吗?