0

rsync を使用して MySQL データをバックアップしようとしています。テーブルは MyISAM ストレージ エンジンを使用します。

私の期待は、最初の rsync の後、その後の rsync が非常に高速になることでした。テーブル データが変更された場合、操作が大幅に遅くなることが判明しました。

実際のデータを含む 989 MB の MYD ファイルで実験を行いました。

テスト 1 - 変更されていないデータの再コピー

  • rsync -a orig.MYD copy.MYD
    • 予想通り時間がかかる
  • rsync -a orig.MYD copy.MYD
    • 瞬時 - スピードアップは数百万単位

テスト 2 - わずかに変更されたデータの再コピー

  • rsync -a orig.MYD copy.MYD
    • 予想通り時間がかかる
  • UPDATE table SET counter = counter + 1 WHERE id = 12345
  • rsync -a orig.MYD copy.MYD
    • 元のコピーと同じくらい時間がかかります!

何を与える?小さな変更をコピーするだけで rsync が永遠にかかるのはなぜですか?

編集: 実際、テスト 2 の 2 番目の rsync は最初の rsync と同じくらい時間がかかります。rsync は明らかにファイル全体を再度コピーしています。

編集:ローカルからローカルにコピーすると、 --whole-file が暗示されます。--no-whole-file を使用しても、パフォーマンスは依然としてひどいものです。

4

4 に答える 4

1

rsync は、何が変更されたかを判断するためにブロック ハッシュを計算する必要があります。変更なしの場合は、ファイルの変更時間/サイズを見るショートカットである可能性があります。

于 2009-07-31T18:27:10.100 に答える
0

ローカルコピーを実行する場合、rsyncはデフォルト--whole-fileで次の理由でになります。チェックを実行するよりも高速です。

  • 最速のローカルコピーが必要な場合は、すでに入手しています。
  • rsyncの高速化を確認したい場合は、ネットワーク経由でコピーしてください。印象的ですが、ローカルのフルコピーよりも高速になることはありません。

ローカルコピーのrsyncは、cp一部のファイルのみが変更される大きなディレクトリがある場合の優れた代替手段です。それらのファイル全体をコピーします。ただし、変更されていないものはすぐにスキップしてください(タイムスタンプとファイルサイズを確認するだけです)。単一の大きなファイルの場合、それは。よりも優れていcpます。

于 2009-10-07T17:13:01.600 に答える
0

rsync は、ファイルが変更されたかどうかを確認するアルゴリズムを使用してから、ファイルのどの部分が変更されたかを確認します。大規模なデータベースでは、変更がファイルの大きなセグメント全体に分散するのが一般的です。これは rsync の最悪のシナリオです。

于 2009-07-31T18:28:54.260 に答える
0

Rsync はファイルベースです。ブロックベースのシステムでそれを行う方法が見つかった場合は、変更されたブロック/バイトをバックアップするだけです。

LVM スナップショットは、これを行う 1 つの方法かもしれません。

于 2009-10-07T17:04:12.007 に答える