2011-07-29 31 views
3

我有一个很大的MySQL表,具有适当的索引等。我从远程计算机运行一个简单的select *查询,我期望得到一个大的结果集。大型结果集的数据传输速度慢

我的问题是,当我运行查询时,结果集以〜300 KBytes/sec的最大数据传输速度返回。 我创建了相同的表,并在SQLServer Express 2008 R2上运行相同的查询,并以2MBytes /秒(我的行限制)的传输速度返回结果。

服务器机器是Windows Server 2008 R2 x64,四核,4GB RAM,MySQL版本是5.6.2 m5 64位。我试图禁用通信协议中的协议,但结果在相同的地方。

有没有人有一个想法,为什么发生这种情况?

--theodore

+0

整个查询过程通常包含大量单个步骤,pe准备,检查权限,锁定,排序结果等,并将数据发送回客户端。你确定你只是在谈论这个数据传输吗?或者它可能是查询还有另一个瓶颈? – Bjoern

+1

这可能是因为它很遥远......达到最大吞吐量。这个结果集究竟有多大? – Dor

+0

发生在我身上的唯一情况是您在配置文件my.ini中向MySQL提供了多少内存。如果MySQL不得不在磁盘上缓存大量内容,传输速度可能会受到影响。 – Jaydee

回答

0

您可能会将苹果与橘子进行比较。

我会在MySQL服务器上运行SELECT *,并查看在本地检索服务器上的数据时获得的数据速率 - 没有网络的额外限制。

如果这也很慢 - 那么它不是网络的错。

当MySQL安装程序运行时,它会要求设置MySQL的人在硬件(即开发服务器,共享服务器,专用)上扮演什么样的角色。

所有这些的不同之处在于MySQL会在服务器上占用多少内存。

最慢的设置是开发(使用最少的内存),最快的是专用(尝试使用大量内存)。您可以修改my.ini文件来更改MySQL为自己分配的内存量,以及/或者google'my.ini内存'以获取更详细的说明。

MySQL正在使用(或不是,视情况而定)的内存将会对性能产生巨大影响。

首先,检查在MySQL服务器上本地检索数据的速度是多少。如果速度很慢,网络不是问题 - 请检查MySQL的内存使用情况 - 理想情况下尽可能多地给它。当然,如果速度很快,那么网络和/或某个数据库中间件(ODBC?)或工具用于显示数据的速度很慢......

还有一件事 - 尝试SELECT * TWICE ...为什么?第二次部分或全部结果(同样取决于内存)应该被缓存...第二次应该更快...

此外,不要忘记在更改我的时候重新启动MySQL。 ini文件(并在进行任何更改之前创建备份...)

相关问题