我们为不同国家的两个不同的客户端提供了两台类似规格的HDD CentOS 7服务器,两个客户端都有相同的数据库和相同的索引。
客户机B的MySQL存储位于NAS上,NAS与服务器的接口为1GB,速度为5MB/ IO。只有读写是在NAS上完成的。原因是服务器有一个小的HDD,250 is。这就是为什么这么慢吗?
请注意,如果查询没有联接,则会很快,但如果有联接,则不会。会不会是NAS想要缓存什么东西?
发布于 2020-09-07 11:52:30
与服务器的1GB接口和5MB/s IO速度
5MB在1Gb的链接上速度很慢。
服务器有一个小的HDD,250 HDD。
对于Windows来说,这是一个舒适的大小,但是其中有多少是免费的呢?
Windows确实不喜欢磁盘空间不足,特别是考虑到该空间中的一部分被分配给交换(分页)文件!
这台服务器有多少内存可用?
如果查询没有联接,那么它是快速的,但是如果它有连接,则它不是.
连接不是缓慢的查询.除非索引不正确地支持这些联接。
我们在这里都假设您的查询基本上是
select * from table1 ; 这将是缓慢的,因为它必须将跨越慢的网络链接的每个数据页拉到内存中,然后将其传递给客户端应用程序。当您开始根据索引字段添加"where“子句时,MySQL可以开始做一些更聪明的事情。
查看您正在运行的实际查询以及它正在使用的表的结构对我们很有帮助。
发布于 2020-09-07 11:20:00
你的读写模式是什么?
如果你写了很多小记录,磁盘和网络延迟是你的敌人,而NAS增加了一层往返网络延迟。
根据NAS的不同,您也可能会受到写入放大的影响(例如,如果数据库认为块为8k,NAS块为64k)
这并不是读取的问题,因为数据被缓存在服务器上,但是写会让您立即支付延迟税。
在今天的计算机中,延迟是主要的问题。
https://blog.morizyun.com/computer-science/basic-latency-comparison-numbers.html
发布于 2020-09-07 21:09:41
请注意,如果查询没有联接,则会很快,但如果有联接,则不会。会不会是NAS想要缓存什么东西?
在这种情况下,我首先考虑用更聪明的算法掩盖未优化的模式,即MySQL 8在MySQL 5.7中不存在,或者在其他设置中不可用。
在执行联接时,通常应该有一个索引。然后,数据库将扫描其中一个表,并使用索引从另一个表中选择匹配的行。
如果没有,数据库可能能够在内存中按联接列对表进行排序,并将它们合并,或者构建内存中的临时索引,前提是:
否则,它只会返回到O(n平方)算法,这是一个大表的性能杀手。
因此,我的第一个猜测是,对于较新的服务器,上述三种条件都得到了满足,并且它优化了查询,但对于较旧的服务器,其中一些条件不是,它运行两个嵌套的完整扫描。
因此,我首先使用解释来确保查询使用索引,如果不使用索引,则创建适当的索引。
https://serverfault.com/questions/1032897
复制相似问题