2016-10-28 6 views
0

これは奇妙なものです:BULK INSERTを実行して、巨大なテキストファイルからテーブルに2000万レコードを追加すると、しばらく実行された後に、たとえば2,500,000行が...私は15分後にもう一度見ます2,200,000の行があります...少し後には2,000,000があります。 BULK INSERT中にレコードの数をどのくらいダウンさせることができますか?私はまた、ディスクの完全な警告のカップルを知っている。ドライブがいっぱいになったら、SQL Serverはレコードを削除し始めますか?助けて!SQL Serverでレコードが失われていますか?

+0

クエリを実行するたびにドライブに空き容量がありますか?また、推測の何か、しかし私はあなたが期待するかもしれない事が 'COMMIT'tedではないと思っています。 [この質問はインスピレーションを与えるかもしれません。](http://stackoverflow.com/questions/41869/is-sql-server-bulk-insert-transactional) –

答えて

0

私は200万レコードのカップルのバッチでこれを試し、何が起こるか見てみましょう。私はMicrosoft's documentationからこれを引っ張っ:

パフォーマンスの考慮事項

ページ数が 単一のバッチでフラッシュする場合は内部しきい値を超え、バッファ プールのフルスキャンを識別するために発生する可能性があります バッチがコミットするときにフラッシュするページ。このフルスキャンは一括インポートのパフォーマンスを損なう可能性があります。大規模なバッファ プールが低速I/Oサブシステムと組み合わされると、内部しきい値を超えた可能性があります( )。大きなマシンでのバッファオーバーフローを回避するには、TABLOCKヒント( バルク最適化を削除)を使用するか、より小さいバッチサイズ( はバルク最適化を保持します)を使用しないでください。コンピュータが異なるため、 は、データロードでさまざまなバッチサイズをテストして にすることをお勧めします。

bcp utilityを調べることもできます。

+0

こんにちは、dylpickle!さて、これは一般的に今までOKでしたが、常にたくさんのレコードがあります。私はディスクがいっぱいになっている可能性があるので、それが動いているのかどうか疑問に思っています。しかし、それでも、BULK INSERTが実行され続けるのに伴い、レコードの数が減少する理由を説明していません。 –

+0

それは変です。私はBob Kaufmanがロールバックのアイディアを持っているかもしれないと思う。ディスク容量とログサイズは、診断に役立つ欠落した情報です。 – dylpickle

+0

SQLサーバーはスレッドとジョブリストを使用します。バルクスレッドがバッチ内の多くの挿入ジョブを処理してディスクに書き込むとしましょう。次に、ディスクに実際に書き込む別のスレッドがあります。これは、OSがディスクに直接書き込むことを許可するまで待たなければなりません。その後、ジョブを取り出してディスクに書き込みます。ジョブでエラーが発生した場合は、エラーをスローし、次の書き込みウィンドウをクリーニング、終了、および待機し、次のバッチで繰り返します。これは、ジョブが同期して実行され続ける方法です。時にはトリップして停止することもありません。 – Tschallacka

関連する問題