3

私たちのパートナーの 1 人から、各ファイルに +/- 30 レコードを含む約 10,000 個の小さなタブ区切りのテキスト ファイルを受け取りました。1 つの大きなファイルで配信することは不可能です。

これらのファイルを ForEach ループ コンテナーで処理します。ファイルを読み取った後、4 つの列の派生が実行され、最後にコンテンツが SQL Server 2012 テーブルに格納されます。

このプロセスには最大 2 時間かかる場合があります。

私はすでに小さなファイルを 1 つの大きなファイルに処理してから、これを同じテーブルにインポートしようとしました。このプロセスにはさらに時間がかかります。

処理を高速化するための提案はありますか?

4

2 に答える 2

2

直感に反するように聞こえることの 1 つは、1 つの派生列変換を 4 に置き換えて、それぞれに 1 つのタスクを実行させることです。これによりパフォーマンスが向上する理由は、これらの変更が独立していると判断できる場合、エンジンが操作をより適切に並列化できるためです。

リモート サーバー上のファイルを参照しているため、ネットワーク遅延が発生している可能性があります。おそらく、処理する前にこれらのリモート ファイルをローカル ボックスにコピーすることで、パフォーマンスを向上させることができます。興味のあるパフォーマンス カウンターは次のとおりです。

  • ネットワーク インターフェイス / 現在の帯域幅
  • ネットワーク インターフェイス/バイト合計/秒
  • ネットワーク インターフェース / 転送/秒

他にできることは、宛先と派生列を行数変換に置き換えることです。すべてのファイルに対してパッケージを数回実行すると、理論上の最大速度が決まります。あなたはそれ以上速く行くことはできません。次に、Derived 列を追加して再実行します。これは、パフォーマンスの低下が宛先、派生列の操作、またはパッケージが IO サブシステムと同じ速度で実行されているためかを理解するのに役立ちます。

于 2013-06-13T15:05:12.867 に答える