大規模なデータベース (一部のテーブルは 500000000 行以上) を使用しています。LOAD DATA INFILE を使用して、毎日 300 万から 1000 万行を置換する必要があり、各インポートは約 100 万行 (CRON では 1 日 3 から 10 回) です。問題は、このような大きなファイルのインポートを行っている間、MySQL が CPU の 80% を消費し、Web サイトから送信されるすべての一般的なクエリが非常に遅くなったり、Web サイトのパフォーマンスが低下したりすることです。サイトは、Amazon の EC2 Windows 2008 サーバーで実行されています。1 つの EC2 インスタンス内でこの問題を解決する方法を知っている人はいますか (データベースを分割せずに) ありがとう。
質問する
1235 次
2 に答える
1
簡単で汚いハック...ソースファイルを小さなロードに分割し、各ロードの間に5分の休憩を入れてDBロード操作としてcron化するのはどうですか? 一度に 1,000 万件のレコードを管理すると、多くのサーバーと DB リソースが使い果たされ、クラッシュが発生します。多くのメモリを備えた大規模なサーバーを使用している場合は、50 ~ 100K の負荷のみを使用してもそれほど悪くはありません。
于 2011-01-11T00:04:55.367 に答える
1
配布は進むべき道のようです(それがFacebookのやり方です)
予算の制約など、そうしない理由がわかりませんか?
他の可能なアプローチ
- ウィンドウの使用を破棄-ウィンドウの制限
- mysql レプリケーションのセットアップ
- cron 経由のインポート中に、すべてのクエリがマスターにヒットするのを防ぎます。インポートが完了したら (2 つのフラグ ファイルを設定し、マスター フラグが存在する場合はスレーブを使用し、スレーブ フラグ ファイルが存在する場合はマスターを使用し、両方が存在しない場合は両方をクエリできます)
- パーティションを検討しますか?
- すべてのインデックスを破棄 (結果を負担)
データベースの使用状況に大きく依存します。ミッション クリティカルでない場合は、オフライン インポートを行うのが非常に適しています
于 2011-01-11T02:58:04.440 に答える