2016-03-24 25 views
-1

我们注意到我们的一些MyISAM.MYD文件(MySQL数据库表)复制速度非常慢。 C:驱动器和D:驱动器均为SSD;理论极限是500MB /秒的数据速率。对于时间安排,我们关闭MySQL服务。下面是一些采样时间为6GB的文件test.myd:MyISAM.MYD文件的非常慢的副本

NET STOP MYSQL56 
Step1: COPY D:\MySQL_Data\test.myd C:\Temp  --> 61MB/sec copy speed 
Step2: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step3: COPY D:\Temp\test.myd c:\temp\test1.myd --> 92 MB/sec 

奇怪的结果;为什么一个方向的速度与另一个方向有很大的不同? 让我们试试这个:

NET START MYSQL56 
in MySQL: REPAIR TABLE test; (took about 6 minutes) 
NET STOP MYSQL56 
Step4: COPY D:\MySQL_Data\test.myd C:\Temp  --> 463 MB/sec 
Step5: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step6: COPY D:\Temp\test.myd c:\temp\test1.myd --> 451 MB/sec 
  • 任何人都可以解释在复印速度的差异?
  • 什么可能导致慢慢的复制速度呢?
  • REPAIR会有什么不同,但是我们首先尝试 的OPTIMIZE并没有什么区别。
  • 初始版本(即REPAIR之前)是否会在SQL级别上出现任何类型的性能?对不起,在运行这些测试之前,我没有测试这个 。

回答

0
  • REPAIR将扫描整个表并修复问题,它发现。这意味着表格被完全读取。

  • OPTIMIZE将整个表复制过来,然后RENAMEs它回到旧名称。结果就好像整个表被读取一样。

  • COPY读取一个文件并写入其他文件。如果目标文件不存在,它必须创建它;这在Windows上是一个缓慢的过程。

  • 读取文件时,数据从磁盘(SSD,在您的情况下)获取并缓存在RAM中。第二次阅读将使用缓存副本,因此速度更快。

这最后一颗子弹项目可能解释你发现的差异。

另一种可能性是“损耗均衡”和/或“先擦后擦” - SSD的两种属性。

磨损平衡是指当SSD移动物体以避免太多“磨损”时。请注意,在N写入之后SSD块会“磨损”。通过移动块,可以避免这种物理缺陷。 (这是企业级SSD的一项功能,但在廉价驱动器上可能会丢失。)

在SSD写入之前,必须首先“擦除”该位置。这额外的步骤仅仅是SSD如何工作的物理要求。我怀疑这是否会影响你的问题,但可能会。

我正在删除[mysql]和[myisam]标签,因为这个问题确实只适用于Windows和SSD的文件COPY。

+0

Rick,谢谢你的关注。我仍然不明白为什么MySQL REPAIR之后的表文件复制得如此之快。 –