0

私は SSIS の比較的初心者なので、ばかげたことをしているかもしれません。

異種のキューをループし、オブジェクトを一度に 1 つずつ処理するプロセスがあります。プロセスは現在、「セットロジック」とそのドロップのもので行われています。ループで作り直すように言われたので、そのように決めました。

1 つのパッケージでキュー ロジックを実装し、別のパッケージで実際の処理を実装することにしました。

これを考えると、これはすべて比較的うまくいっています...

私は今、プロセスを稼働させていますが、遅いです。アイテムごとに 9 秒。明らかに、私はこの解決策を提示できません。:-)

私が気づいたことの1つは、各ループの1.5〜2秒がキューループのExecutePackageタスクにあります。

ハード値を取得する方法がわかりません。緑色のボックスが点滅するパフォーマンス チューニング方法を使用しています。他のステップは非常に速いようです。インデックスの追加、SQL から SP への変更、すべての通常のトリックが役立ちました。

  1. ボックスが白/黄/緑に変わることに関して、UIはまったく現実的ですか? 一部のタスクは進行状況タブで時間を報告しますが、そうでないタスクもあります。だから私は黄色の時間を数えています。

  2. サブパッケージの呼び出しはそんなに高くつくべきですか? 私が行った1つの変更は、「RunInASeparateProcess」をFALSEに変更したことです。そうしないと、サブパッケージが次のメッセージを生成するためです。

    エラー: スクリプト タスクでの 0xC0012024: タスク "スクリプト タスク" は、このエディションの Integration Services では実行できません。より高いレベルのエディションが必要です。タスクが失敗しました: スクリプト タスク

  3. 私が行った読書は、複数のパッケージを提唱しているようです。誰かカウンターパターンを持っていますか?コースにとどまるべきですか?1パックに変え始めました。コピー/貼り付けは、SequenceContainers ではうまく機能しないようです。また、親パッケージ内のすべての変数を再作成する必要があります。実行可能ですが、それが答えかどうかはわかりません。

  4. 彼らが喜んで共有するチューニングリソース/ウェブサイト/本を知っている人はいますか?

更新 - 問題が何であるかを把握するために、物事を分解してきました。変数値を渡すパッケージ構成だと思っていました。私はそれだとは思わない。何も入っていない別のパッケージに変数を渡すことができ、高速です。

2 つの接続マネージャーを追加することで、簡単なサブパッケージを遅くすることができます。メイン パッケージとサブ パッケージの両方で、Oracle サーバーと SQL サーバーの両方への接続を確立したり切断したりしている可能性があることに突然気付きました。

この観察は正しいですか?

2 つのパッケージ間の接続を再利用する方法はありますか? 私がグーグルで検索すると、ほとんどの場合、接続文字列を渡すための提案が表示されます。

更新 - 2 つのパッケージを 1 つにまとめました。このパフォーマンスは、アイテムあたり約 1.25 秒ではなく、約 9 秒から減少しています。私が指摘できる唯一の変更点は、複数の接続を作成する代わりに、単一の接続を再利用していることです。

ありがとうございました。

グレッグ

4

1 に答える 1

1

ロギングを有効にしたら、コマンド ウィンドウから を使用してパッケージを実行することをお勧めしますdtexec。これはサーバー環境を完全に複製するものではありませんが、(a) 潜在的なパフォーマンスの問題として BIDS を排除し、(b) 変更管理のフープをジャンプせずに実行できるという利点があります。

于 2012-11-19T20:36:36.420 に答える