2017-09-21 16 views
1

コンテキスト: SQLサーバー(2014)には、数百のストア番号の一意のリストを持つテーブルがあります。これらのストア番号に基づいてデータを取得し、このデータを別のSQLサーバー(2014)にダンプする必要があるDB2 LUWサーバーがあります。制限のため、ストア番号を25のグループにチャンクして、クエリを何度も実行する必要があります。オブジェクト変数をループするForeachループコンテナ付きのSSISパッケージ

SSISでこれを行うには、SQLストアドプロシージャを使用して一度に25個のストア番号を取り出し、一重引用符で囲んだカンマ区切りの文字列( '12345'、 '03884'など)に入れます。私はオブジェクト変数に格納します。次に、Foreachループコンテナを使用して、オブジェクト変数から文字列を取り出し、文字列変数に格納します。次に、DB2クエリを含む文字列変数があり、パラメータとしてストアリスト文字列変数が使用されます。

"select x, y, z from DB2SERVERTABLE where store_number in " + @[User::Store_List] 

次に、別のExecute SQLタスクを使用して、そのクエリで変数を実行します。完全結果セットは別のオブジェクト変数に格納されます。結果をオブジェクト変数から取り出して他のSQLサーバーに挿入するには、別のFELCを使用して、変数マッピング・スクリーンを使用して各フィールドを文字列変数に格納する結果セットを反復処理します。 FELCの中には、SQLサーバーに変数を挿入する簡単な挿入ステートメントである、最後のSQL実行タスクがあります。

insert into table values (?,?,?); 

これはどういうわけか、実際には動作します。

ザ・ハード(ソフト)ウェア:

  1. はVMWareのWindows 2012 R2サーバー64 -
  2. のIntel Xeon E5-4650 CPU 4コア2.69GHz @
  3. 32ギガバイトRAM(SQL Serverが27ギガバイトをコミットこれは本当に唯一の5ギガバイト...)
  4. のVisual Studio 2015
  5. SSDT 2015
  6. のDB2 LUW(わからないどのバージョン)
  7. のSQL Server 2014

問題:最終FELCと信じられないほど遅い実行して挿入します。私の最後のテストでは、DB2(〜95K行)から1つのストア番号のデータを取り出しました。 20分後には、SQLサーバーに40K行しか挿入されていませんでしたが、[進行状況]タブの行数を見ているうちに、プロセスが停止するまで遅くなり、処理が遅くなりました。この時点で、Visual Studioは〜3GBのRAMと50%のCPUを使用していました。 私は嵐の中でグーグルグーグルをしています。私は似たような状況の人を私に見つけることはできません。私は、スクリプトタスクを介してC#で多くの作業を行う方が良いかもしれないと思っています。コードに戻ってくる前に、誰かが問題を認識してくれることを期待しています。ありがとう!このステップのために

答えて

0

「完全な結果セットが別のオブジェクト変数に格納されたオブジェクト変数のうち、結果を取得し、私の他のSQLサーバーにそれらを挿入するには、私はを反復処理するために別のFELCを使用しています。 FELCの内部には、変数をSQLサーバーに挿入する単純な挿入ステートメントであるSQL実行タスクがあります。"

ローカルのSQLテーブルにデータを挿入し、代わりに最終的なFELCを使用してください。データをフィルタリングするためにルックアップを使用してください。

関連する問題