1

SSRS 2008 R2とレポートビルダー3.0を使用しています。私は援助が必要なカスケードなレポートの問題があります。最初のレポートは正常に動作します。レポート内のリンクをクリックすると、@processIDパラメータがフォローアップレポートに渡されます。2008 R2のパラメータを置き換えるSSRS

SSMSでパラメータの代わりに文字列を使用してクエリを実行すると、1秒以下かかります。私はパラメータをSSRSで実行すると約15分かかります。私はSSRSがパラメータをうまく処理していないことを読んだ。私がしたいのは、パラメータを文字列に変更して送信する方法、または誰かがより良い方法を知っている場合です。あなたは、クエリの結果を変更することなく、あなたのhavingwhereに変更することができますように、それが見えかかわらず、元の問題の

SELECT  ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus, 
         ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec, COUNT(Summary.Id) AS SumRec 

FROM   ResultDetail_View LEFT OUTER JOIN 
         Summary ON ResultDetail_View.processOid = Summary.Id LEFT OUTER JOIN 
         outputItem ON ResultDetail_View.outputOid = outputItem.outputItemOid 

GROUP BY ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus, 
         ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec 

HAVING  (ResultDetail_View.processOid = @processID) 

ORDER BY ResultDetail_View.startTime 
+0

レポートでクエリをどのように実行していますか?それはストアドプロシージャですか?もしそうなら、これは[Parameter Sniffing](https://www.brentozar.com/archive/2013/06/the-elephant-and-the-mouse-or-parameter-sniffing-in-sql-server)のように見えます。 /)これは、SQL Serverの最適なクエリプランを選択する能力を妨げます。 – iamdave

+0

残念ながら、これは継承されたレポートです。これらは、アドホック形式であり、ストアドプロシージャではありません。私が投稿したコードは、文字通り実行されるデータセットクエリです。私はこれについてまだパラメータスニッフィングを発見していない。私は再コンパイルを行ったばかりで、SSRSとSSMSの両方で同じ時間がかかっています。 – bwilliamson

+0

SQL Serverインスタンスでトレースを実行して、レポートの実行時にサーバー上で実行されているクエリを正確に確認しましたか。いったんそれを持っていれば、同じサーバー上のSSMSで直接実行するならば、まったく同じパフォーマンス(それが良いか悪いか)を知る必要があります。それは答えではありませんが、少なくともあなたが問題を調査するのに役立つはずです。 –

答えて

0

:以下

は、レポートが実行されているクエリですか?これが事実であれば、確かにパフォーマンスに役立ちます。

パラメータスニッフィングに関して、ローカルのnvarchar変数を設定し、この方法でレポートを実行しようとしましたか?

delcare @processIDLocal nvarchar(50) = @processID; 

select r.processOid 
     ,r.applicationId 
     ,o.outputValue 
     ,r.startTime 
     ,r.resultStatus 
     ,r.statusMessage 
     ,r.endTime 
     ,r.ErrRec 
     ,count(s.Id) as SumRec 
from ResultDetail_View as r 
    left outer join Summary as s 
     on r.processOid = s.Id 
    left outer join outputItem as o 
     on r.outputOid = o.outputItemOid 
where r.processOid = @processID 
group by r.processOid 
     ,r.applicationId 
     ,o.outputValue 
     ,r.startTime 
     ,r.resultStatus 
     ,r.statusMessage 
     ,r.endTime 
     ,r.ErrRec 
order by r.startTime; 
+0

これは実行中に何も変わっていません。 SSMS上で直接実行される同じクエリがミリ秒単位で実行されるため、これはパラメータスニッフィングの問題ではありません。 – bwilliamson

+0

@bwilliamson "* SSMS上で直接実行される同じクエリとしての* *"これはパラメータスニッフィングの最大の指標です... – iamdave

+0

再コンパイルで両方の場所で同じクエリを実行すると、それぞれの計画?また、@parameterの代わりに文字列値だけを使用するようにレポートビルダーのデータセットクエリを変更した場合、13分と比較して2〜2で実行されます。実行計画は、プロセスを通じて1行と1100万行の違いを示します。 – bwilliamson

関連する問題