0

250k レコードを含むテーブル内のレコードを更新するデータフロー タスクがあります。更新は主キーを使用して行われています。SSIS は 3 秒かかります。

  1. レコードに対して評価される正確な sql を抽出する方法はありますか (任意のレコード、確かな例が欲しいだけです)

私が合理的に正しいSQLであると信じているものをモックアップして SSMS で実行すると、0.0秒かかります(SSISパッケージを介してレコードが更新されるため、私が思っていることをやっていると確信しています)

  1. 3秒かかる可能性があります。SSISに固有のようです。私の理由は、SSMS は非常に高速に実行されるからです。データベースではありません。

私は釣りをしています、認めますが、グーグルは私を助けてくれません。誰にも提案はありますか?

ありがとう

グレッグ

4

1 に答える 1

3

既定の更新コンポーネントである OLE DB コマンド コンポーネントは、行ごとの (RBAR) 更新を実行します。これでは通常、優れたパフォーマンスが得られません。更新のより良いパターンは、変更を "通常の" 宛先 (OLE DB 宛先または ADO .NET 宛先) にステージングすることです。データ フロー タスクが完了したら、SQL 実行タスクを使用して、これらの行に対してセットベースの更新を実行します。Stairway to Integration Servicesシリーズ、特にレベル 4 を読んで、このパターンを確認してください。

上記の更新の問題以外に、SSIS の更新と SSMS の更新との違いは、SSMS はスクリプトを実行して終了するだけであるということです。SSIS は単に「動く」だけではありません。これはかなり複雑な処理モデルを持っているため、パッケージが正しい状態であること、リソースが利用可能であることなどを検証する必要があります。これにより、SSIS がパッケージ内の特定のステップに費やした時間が表示されます。タイミングの目的で、Visual Studio (BIDS/SSDT) 内からパッケージを実行すると、起動してデバッグ リソースを管理する必要があるため、コマンド ライン バージョンよりも遅くなることに注意してください。チェックマーク)。

まだ何が起こっているのか知りたいですか?SQL プロファイラーを有効にすると、SSIS パッケージからすべての SQL Server アクティビティをキャプチャできます。実稼働サーバーで長期間にわたってすべてをキャプチャする場合、これが与える可能性のある影響に注意してください. お気に入りの検索エンジンを使用している場合にプロファイラーを実行する方法を説明する、利用可能なリソースがたくさんあります。

于 2012-11-19T22:31:09.610 に答える