2016-03-24 12 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とは何が違いますか?まずは を試してみましたが、違いはありませんでした。
  • 初期バージョン(すなわち、REPAIRの前)のSQLレベルでのパフォーマンスの低下はありますか?申し訳ありませんが、これらのテストを実行する前に、この をテストしませんでした。

答えて

0
  • REPAIRは、テーブルをスキャンし、それが見つけた問題を修正します。これは、テーブルが完全に読み取られたことを意味します。

  • OPTIMIZEは、表全体をコピーしてから、RENAMEsを元の名前に戻します。テーブル全体が読み込まれたかのようになります。

  • COPYは、1つのファイルを読み取り、他のファイルに書き込みます。ターゲットファイルが存在しない場合は作成する必要があります。これはWindowsの処理が遅いためです。

  • ファイルを読み込むとき、データはディスク(あなたの場合はSSD)からフェッチされ、RAMにキャッシュされます。 2番目の読み込みでは、キャッシュされたコピーが使用されるため、高速になります。

この最後の箇条書き項目あなたが見つかった矛盾を説明することがあります。

もう1つの可能性は、SSDの2つの特性である「ウェアレベリング」および/または「消去前書き込み」です。

ウェアレベリングは、SSDがあまりにも多くの「摩耗」を避けるために物を動かすときです。 SSDブロックは、N書き込み後に消耗することに注意してください。ブロックを動かすことによって、この物理的な欠陥が回避されます。 (これはエンタープライズグレードのSSDの機能ですが、安価なドライブにはない可能性があります)

SSDで書き込むことができる前に、まずそのスポットを "消去"する必要があります。この特別なステップは、単にSSDがどのように機能するかの物理的要件です。私はそれがあなたの質問に影響するかどうかは疑問ですが、それは可能性があります。

[mysql]タグと[myisam]タグは削除されています。なぜなら、この質問はWindowsとSSDのCOPYファイルにのみ適用されるからです。

+0

リック、これを見ていただきありがとうございます。私はまだ、なぜMySQL REPAIRの後のテーブルファイルがずっと速くコピーされたのか理解できません。 –