2012-01-23 5 views
0

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

答えて

2

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

SqlBulkCopy:1.5885s
SqlDataAdapterオブジェクト:あなたはSqlBulkCopyでTableLockオプションを使用する場合

25.0729sあなたも、高いスループットを得ることができ、私のテストでインポートを取りました次に0.8229sに下がります。

SqlBulkCopyを使用すると、データのセグメントを同じ宛先テーブルに並行してバルクロードすることができます。別のexternal linkの申し訳ありませんが、私はそれが適切だと思います。これは最適なパフォーマンスのためにヒープテーブルにロードすることです。インデックスはありません。現在のシナリオではオプションではないかもしれませんが、確かに知る価値があります。

+0

SqlBulkCopyで多くのことを実践してきたので、「タイムアウトの期限が切れました。完了までにタイムアウト時間が経過しました...」というエラーが表示されます。私は接続タイムアウトを600秒に増やしました。しかし、私は半分の時間でエラーを取得します。 –

+0

BulkCopyTimeoutをSqlBulkCopy(秒単位)に設定してみてください:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx – AdaTheDev

+0

@AdaTheDevありがとうございます。あなたは時間のトンを保存しました –

関連する問題