首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL非常慢,是否可能是因为存储引擎位于NAS上?

MySQL非常慢,是否可能是因为存储引擎位于NAS上?
EN

Server Fault用户
提问于 2020-09-07 10:21:29
回答 3查看 2.6K关注 0票数 3

我们为不同国家的两个不同的客户端提供了两台类似规格的HDD CentOS 7服务器,两个客户端都有相同的数据库和相同的索引。

  • 客户机A:服务器只运行MySQL 8,速度非常快。查询X需要11秒才能完成。客户端A的数据库比客户端B有更多的记录。
  • 客户机B:服务器正在运行LAMP + MySQL 5.7,内存和CPU正常,查询X的通话时间超过两个小时。任何在任何其他服务器上花费X时间的查询,在客户机B服务器上都需要10倍的时间。

客户机B的MySQL存储位于NAS上,NAS与服务器的接口为1GB,速度为5MB/ IO。只有读写是在NAS上完成的。原因是服务器有一个小的HDD,250 is。这就是为什么这么慢吗?

请注意,如果查询没有联接,则会很快,但如果有联接,则不会。会不会是NAS想要缓存什么东西?

EN

回答 3

Server Fault用户

发布于 2020-09-07 11:52:30

与服务器的1GB接口和5MB/s IO速度

5MB在1Gb的链接上速度很慢。

服务器有一个小的HDD,250 HDD。

对于Windows来说,这是一个舒适的大小,但是其中有多少是免费的呢?

Windows确实不喜欢磁盘空间不足,特别是考虑到该空间中的一部分被分配给交换(分页)文件!

这台服务器有多少内存可用?

如果查询没有联接,那么它是快速的,但是如果它有连接,则它不是.

连接不是缓慢的查询.除非索引不正确地支持这些联接。

我们在这里都假设您的查询基本上是

代码语言:javascript
复制
select * from table1 ; 

这将是缓慢的,因为它必须将跨越慢的网络链接的每个数据页拉到内存中,然后将其传递给客户端应用程序。当您开始根据索引字段添加"where“子句时,MySQL可以开始做一些更聪明的事情。

查看您正在运行的实际查询以及它正在使用的表的结构对我们很有帮助。

票数 4
EN

Server Fault用户

发布于 2020-09-07 11:20:00

你的读写模式是什么?

如果你写了很多小记录,磁盘和网络延迟是你的敌人,而NAS增加了一层往返网络延迟。

根据NAS的不同,您也可能会受到写入放大的影响(例如,如果数据库认为块为8k,NAS块为64k)

这并不是读取的问题,因为数据被缓存在服务器上,但是写会让您立即支付延迟税。

在今天的计算机中,延迟是主要的问题。

https://blog.morizyun.com/computer-science/basic-latency-comparison-numbers.html

票数 1
EN

Server Fault用户

发布于 2020-09-07 21:09:41

请注意,如果查询没有联接,则会很快,但如果有联接,则不会。会不会是NAS想要缓存什么东西?

在这种情况下,我首先考虑用更聪明的算法掩盖未优化的模式,即MySQL 8在MySQL 5.7中不存在,或者在其他设置中不可用。

在执行联接时,通常应该有一个索引。然后,数据库将扫描其中一个表,并使用索引从另一个表中选择匹配的行。

如果没有,数据库可能能够在内存中按联接列对表进行排序,并将它们合并,或者构建内存中的临时索引,前提是:

  • 它已经实现了算法,
  • 有足够的内存来缓存数据,以及
  • 正确猜测哪种算法会更快。

否则,它只会返回到O(n平方)算法,这是一个大表的性能杀手。

因此,我的第一个猜测是,对于较新的服务器,上述三种条件都得到了满足,并且它优化了查询,但对于较旧的服务器,其中一些条件不是,它运行两个嵌套的完整扫描。

因此,我首先使用解释来确保查询使用索引,如果不使用索引,则创建适当的索引。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1032897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档