400 万行のデータを読み込むのに約 4 日かかりますが、ストアド プロシージャは 1 行あたり約 500 ミリ秒かかるようです。そのため、一時的に 2 台のコンピューターを再利用することをお勧めします。各マシンは、大量のメモリーを備えた 4 cpu、2 コア/cpu のコンピューターです。
データのロード方法については、競合する 2 つのアイデアがあります。
- インポート コンピューターでは、VM を使用して維持するため、4 コアの使用に制限されます。
- ロード用の VM を捨てて、ロード用に 8 つのコアすべてを使用します。
データベースは VM ではなく、実際のコンピューター上にあります。
VM を使用するとパフォーマンスにかなりの影響があることを示すのに一苦労しますが、それは単なる直感です。それを証明する必要があるので、より小さなデータセットでテスト ロードを行うことを提案します。12G 程度のデータをロードするのではなく、おそらく 6G だけをロードして数値を取得します。
しかし、これは 1 回しかないので、両方の環境で使用できるスレッドの数を合理的に推測したいと思います。
データベース トランザクションにはスレッドの待機時間がかなりかかるため、私の推測では 4 スレッド/コアですが、VM 上のスレッドが多すぎるかどうかはわかりません。提案するスレッドの妥当な数を判断する方法がわかりません。
制限要因は、データをロードするプログラムを持つコンピューターではなく、実際にはデータベース コンピューターである可能性があり、32 の同時データベース接続は 8 コア マシンには多すぎる可能性があります。
では、両方の環境でコアあたり 4 スレッドという私の推測は妥当でしょうか?
コンピューターの OS は Windows Server 2008 R2 で、VM は Hyper-V を使用します。
アップデート:
念のため、並列フレームワークを使用して .NET 4 を使用しているため、構成ファイルで変更して同時スレッドの数を調整し、PLINQ を多用しています。
更新 2:
私は今日、物事をスピードアップするためのアイデアを思いつきました。ベンチマークには 1 つの 4 コア VM を使用しますが、コンピューターには 48G RAM があり、データベースは完全にメモリ内にあるため、SQL Server は 24G 仮想ドライブ (RAM ドライブ) を使用します。 . このようにして、フィーダープログラムと同じくらい速く複数のスレッドでフィードできるはずです。それが十分に高速でない場合は、12 個のコアすべてを使用してフィードしますが、必要ないと予想されます。したがって、すべてのデータを 1 か月ほどではなく 1 日でロードできるようになることを願っていますが、ベンチマークを取得したら、全員にお知らせします。VM を使用することによるペナルティがあるかどうかを確認するために、小さなデスクトップを使用してフィードすることを検討するかもしれませんが、このボックスには VM が 1 つしかないため、8 コアは使用されません。Hyper-V ボックスの OS は Windows Core です。