0

248 MB のログ ファイルがあり、最大 1 GB まで拡張できます。行数は想像できると思いますが、すべての行を SQL Server データベースのテーブルにインポートする必要があります。そのために、まず DataTable を作成し、ログ ファイルのすべての行をその DataTable に新しい行として追加します。これはかなり速く起こります。約 30 秒で 100 万を超えるレコードがテーブルに追加されます。テーブルに行が入力されたら、ストアド プロシージャを使用して DataTable のレコードをデータベースにインポートします。ただし、このフェーズは非常に頻繁に実行されます。代わりに SqlBulkCopy WriteToServer メソッドを使用する必要があるのか​​ 、それともこの方法を維持する必要があるのか​​ 疑問に思いますか?SqlBulkCopy の方が適している場合は、DataTable または IDataReader バージョンを使用する必要があります。前もって感謝します。

4

1 に答える 1

4

このような実際のボリュームのデータインポートには、SqlBulkCopyを使用します。SqlDataAdapterとのパフォーマンスの違いは大きくなる可能性があります。たとえば、100K行をインポートするためのパフォーマンス比較としてブログを書きました。

SqlBulkCopy:1.5885s
SqlDataAdapter:25.0729s

SqlBulkCopyでTableLockオプションを使用すると、さらに高いスループットを得ることができます。私のテストでは、インポートが0.8229秒になりました。

また、SqlBulkCopyを使用すると、複数のインスタンスが互いに競合することなく、データのセグメントを同じ宛先テーブルに並行して一括ロードできることにも注意してください。別の外部リンクについてお詫びしますが、それは適切だと思います。これは、最適なパフォーマンスを得るために、インデックスなしでヒープテーブルにロードすることです。これは、現在のシナリオではオプションではないかもしれませんが、知っておく価値はあります。

于 2012-01-23T08:40:42.783 に答える