1

SP のリストを SSIS パッケージに変換する必要があります。ほとんどの SP は、次の手順を実行します。

  1. テーブルを作成し、多くの結合を持つ「SELECT INTO」ステートメントを使用してデータを挿入します。
  2. テーブルを更新します - これにも多くの結合があります。
  3. 作成したテーブルにインデックスを作成します。

ここでどのようなアプローチを使用する必要がありますか? SP には ETL がないため、ステートメントの各セットを 1 つのExecute SQLタスクに変換しました。これは正しいアプローチですか?
パッケージのパフォーマンスを向上させるために何ができるでしょうか?
別の SP を異なるパラメーターで何度も呼び出す SP があります (パラメーターは SP でハードコーディングされています)。ここで適切な SSIS タスクはどれですか? true で使っExecuteSQL taskてみました。RetainSameConnection

4

1 に答える 1

0

ステートメントの各セットを 1 つの「SQL 実行」タスクに変換しました。これは正しいアプローチですか?

いいえ、SSIS パッケージのコンテキスト内でストアド プロシージャを呼び出すことによって「長いプロシージャは管理が容易ではありません。また、パフォーマンスを向上させたい」というあなたの声明を考えると、あなたが達成したのは、呼び出しにオーバーヘッドのレイヤーを追加することだけです。 .

どうすれば良くなりますか?それはあなたが何をしているかに大きく依存するでしょう。あなたの一般的なアプローチはおそらく次のようになります

  1. ソースおよび宛先の OLE DB 接続マネージャーを作成する
  2. 文字列型の変数を作成し、これを使用して作成中のテーブルの名前を格納します
  3. Execute SQL Task - これにより、実際に目的のテーブルが作成されます。明示的なテーブル宣言は、INTO ステートメントでテーブルを作成するよりも効率的であると読んだことがあると思います。
  4. データ フロー タスクをその SQL 実行タスクに接続します。OLE DB ソースを使用して、ソース タイプをテーブルからクエリに変更し、ストアド プロシージャを呼び出します。これは、宛先テーブルを作成しないように変更する必要がある場合があります。OLE DB 宛先をキャンバスにドロップし、宛先を「可変高速ロード (おおよその名前) からテーブルまたはビュー」に変更し、上記で作成した変数を選択します。
  5. 更新は、おそらく既存のロジックに任せるのが最善です。それをexecute sqlタスクに入れるだけです
  6. このインデックスの作成も SQL 実行タスクになります。

これらすべての結合でまだ処理が遅くなりますか? それはおそらく調整操作になるでしょう。テーブル構造、クエリ、および推定クエリ プランを確認する必要があります。

于 2012-10-16T13:38:31.397 に答える