1

私は BCP を使用して膨大な量のデータをインポートしていますが、この操作の速度を向上させるためにどのようなオプションが必要かについて興味がありました。

いくつかの場所での並列読み込みについて読みましたが、データの並べ替えや制約のチェックを気にしないように指示できることもわかりました (ソースは完全な別のデータベースであるため、これらはすべて実行可能なオプションです)。

ただし、これらのオプションが使用されている例は見たことがありません (つまり、どのコマンド ライン スイッチが並列読み込みを有効にしたり、制約チェックを無効にしたりするのかわかりません)。

これを学ぶための良いリソースを知っている人はいますか、それとも些細な例をいくつか教えてもらえますか? また、BCP パラメーターのヘルプ ページを参照させないでください。これらの特定のオプションに関して、頭も尻尾もわかりませんでした。

どんな助けでも大歓迎です!

4

2 に答える 2

5

データ読み込みパフォーマンスガイドを読む必要があります。「より速くロードする」という魔法のコマンドラインスイッチはありません。これは、適切なコンテキストで適切なことを行うという非常に複雑なバランスです。ヒープとBツリーのどちらをロードするか、データが既に存在するかテーブルが空であるか、セカンダリインデックスがあるかどうか、データベースリカバリモデルで最小限のロギングが可能かどうか、テーブルがパーティション化されているかどうかによって異なります。データが事前にソートされているかどうか、それは単なる表面です。リンクされたホワイトペーパーにすべての詳細があります。

于 2012-05-07T22:55:28.240 に答える
4

あなたが話している並列読み込みは、同じテーブルに対して BCP ユーティリティの複数のインスタンスを実行しているようです。事前にデータを分割する責任があります。TABLOCKテーブルヒントを指定して使用します。MSDN から:

一括更新 (BU) ロックを使用すると、複数のプロセスがデータを同じテーブルに同時に一括コピーでき、データを一括コピーしていない他のプロセスがテーブルにアクセスするのを防ぐことができます。

したがって、これは実際には BCP の特別なロックにすぎません。

パフォーマンスをさらに向上させるには、 BCP パラメーターページの-aフラグをさらに読むことができます。

-aより大きなパケット サイズ (4096 から 65535 の間) を指定して、ネットワーク パケットごとにサーバーに一度に送信されるデータの量を増やすことができます。

-eまた、複数の BCP プロセスを実行して発生したエラーを追跡する場合は、エラー付きのフラグを使用することをお勧めします。

于 2012-05-07T22:06:41.540 に答える