我们注意到我们的一些MyISAM .MYD文件(MySQL数据库库表)复制速度极慢。 C:驱动器和D:驱动器都是SSD;理论上的限制是500MB /秒的数据速率。对于时间,我们关闭MySQL服务。以下是带有6GB的文件test.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
答案 0 :(得分:0)
REPAIR
会扫描表格并修复找到的问题。这意味着该表已完全读取。
OPTIMIZE
复制整个表格,然后RENAMEs
将其复制回原来的名称。结果就好像读了整个表一样。
COPY
读取一个文件并写入另一个文件。如果目标文件不存在,则必须创建它;这是Windows上的一个缓慢过程。
读取文件时,数据从磁盘(在您的情况下为SSD)中提取并缓存在RAM中。第二次阅读将使用缓存的副本,从而更快。
最后一个项目可以解释您找到的差异。
另一种可能性是"磨损均衡"和/或"擦写前写" - SSD的两个属性。
磨损均衡是指SSD移动物体以避免过多的磨损"。请注意,SSD块"磨损"在N写入之后。通过移动块,可以避免这种物理缺陷。 (这是企业级固态硬盘的一项功能,但在廉价硬盘上可能会丢失。)
在SSD上发生写入之前,必须首先擦除该地点"。这一额外步骤只是SSD工作方式的物理要求。我怀疑它是否会影响你的问题,但它可能会。
我正在删除[mysql]和[myisam]标签,因为这个问题实际上只适用于带有Windows和SSD的文件COPY。