3

SSISパッケージ(SQLエージェントジョブを介して実行)によってストアドプロシージャが非常に遅く実行される非常に奇妙な問題に直面していますSSMSで手動で実行します。ストアドプロシージャSSIS経由で24,000%遅く実行する(SQLエージェントジョブ経由)SSS経由で手動で実行する

ジョブを実行するには約2時間かかります。手動で実行するにはわずか30秒かかります。

同じストアドプロシージャを実行し、同じサーバーで実行します。

これは、SSISパッケージ内の流れの構造である:

The SSIS control flow

問題のストアドプロシージャの名前がBR_SHP_Timekeeper_Costsです。

同じ名前を持つExecute SQL TaskADO.NET connection managerを使用して実行します。

EXEC BR_SHP_Timekeeper_Costs @p1, @p2 

をあなたも見ることができるように、このタスクは、優先順位制約によって「連鎖」され、それは自分自身で実行されるように、すなわちしません他の仕事と競合する。

私が気づいたのは、(SQLエージェント経由で)パッケージの実行中に、そのタスクにヒットしたときに、アクティビティモニターでCXPACKET待機タイプが多数表示され、CPUが97〜99%を実行していたことでした。

  1. FYI、サーバはMAXDOP 8のvCPUが0に設定されており、並列処理のしきい値のコストは、これまで5

    に設定されている、私が試してみました/調査/次を発見

    あり、このストアドプロシージャのための唯一の1、キャッシュされた実行計画があり、それは(手動でストアドプロシージャを実行している)SSISとSSMSの両方で使用されているT-SQLを実行しているダミーのSQLエージェントジョブ作成さ

  2. - EXEC BR_SHP_Timekeeper_Costsを。ジョブは〜30秒で完了しました。

  3. 実行SQLタスクのみを含み、ADO.NET接続マネージャを使用して同じストアドプロシージャを実行するダミーSSISパッケージが作成されました。次に、新しいSQLエージェントジョブを介して実行します。 〜30秒で完了します。

他に何が確認できますか?

これはなぜ起こりますか?

+0

はい、私はこれを行うことを計画しています@TheGameiswar – TheGameiswar

+0

にStoredProc内のすべてのステートメントにオプション(MAXDOP 0)を設定してみてくださいともオプション(再コンパイル)を使用して、それを実行するのに役立ちますかどうかを確認。それでも、SSMSで手動で実行し、エージェントジョブ経由でダミーのSSISパッケージを実行しても、30秒後に戻ってくるのはなぜなのでしょうか?統計とは関係がありますか?実際のジョブが終了すると、関連するデータベースでsp_updatestatsが実行されます。 – TheGameiswar

+0

以下のようにSSISであなたのストアドプロシージャを実行してみてください、それが – iKnowNothing

答えて

0

ストアドプロシージャで定義された2つの変数にパラメータ@ p1と@ p2を割り当ててから、パラメータの代わりにこれらの変数を使用してみることもできます。例:

ALTER PROCEDURE BR_SHP_Timekeeper_Costs 
@p1 int, 
@p2 int 

AS 

declare @_p1 int, @_p2 int 
set @_p1 = @p1 
set @_p2 = @p2 
.... 
.... 
select column1, column2 from table t where t.p1 = @_p1 
.... 
.... 

この回避策は、場合によっては実行を高速化する可能性があります。

は、それはあなたのお役に立てば幸い!

関連する問題