2016-03-24 55 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之後的表文件複製得如此之快。 –