私はバルクロードのパフォーマンスを向上させるために取り組んでいます。数億のレコード+毎日。
データテーブルの代わりにインターフェイスを使用するためにこれを移動し、IDatareader
パフォーマンスが大幅に向上しました(1分あたり500,000レコード以上)。現在の設定は次のとおりです。
- 区切られたファイルを解析するためのカスタムキャッシュリーダー。
- バッファリングされたストリームでストリームリーダーをラップします。
IDatareader
オブジェクトを列挙し、インターフェイスを実装するカスタムオブジェクトリーダークラス。- 次に
SqlBulkCopy
サーバーに書き込みます
パフォーマンスボトルネックの大部分は直接にありSqlBulkCopy.WriteToServer
ます。プロセスをユニットテストすると、プロセスだけを除いてWriteToServer
、約1分で戻ります。WriteToServer
さらに15分以上かかります+。単体テストの場合、それは私のローカルマシン上にあるので、データベースが存在するのと同じドライブであるため、ネットワークを介してデータをコピーする必要はありません。
ヒープテーブルを使用しています(インデックスなし、クラスター化または非クラスター化、パフォーマンスに大きな違いはなく、さまざまなバッチサイズで遊んだことがあります)。
ロード時間を短縮する必要があるので、誰かがこのターンアップからもう少し血を搾り出す方法があることを願っています。