レポートサービス2014で問題が発生しました-レポートのすべてのクエリはManagement Studioから正常に実行されていましたが、レポートの実行中にタイムアウトしました。
これはユーザーからのメッセージです:
ロードでスタックするSSRS 2014レポートのトラブルシューティングを行うにはどうすればよいですか?
sSRSログはどこにありますか?
レポートには3つのデータセットがあり、クエリを削除してSSMSSで実行すると、すべて正常に実行されます。
このレポートサービスサーバーにはサービスのみがあり、データベース(ReportServerなど)は別のサーバー上にありますが、それは問題ではなく、数か月間実行されています。
これはレポートのクエリです:
USE Product
declare @SeasonId int;set @SeasonId = 16
SELECT DISTINCT
EDP [EDP],
'-' [PO],
NULL [PO Type Initial/ Repeat],
NULL [PO Status Open/ Close],
s.StyleCode + c.ColourCode + sz.SizeCode [SKU] ,
StyleDesc [Style Description] ,
s.StyleCode [Style] ,
c.ColourCode [Option] ,
SizeCode [Size] ,
NULL [MPLAN Segment Code],
SeasonDesc [Season],
DepartmentDesc [Department],
CategoryDesc [Category],
NULL [ALL Season, SPR Only, SUM Only, INTERNET Only],
NULL [Fabric Type],
NULL [Garment Composition],
NULL [Country Of Origin],
NULL [MID Code],
NULL [HTS Code],
0.00 [Cost to use],
NULL [Exception Flag],
NULL [Duty Rate]
FROM [Product].[dbo].[Style] s
JOIN Product.dbo.StyleDetail sd ON s.StyleID = sd.StyleID
JOIN [Product].[dbo].[Category] ct ON s.CategoryID = ct.CategoryID
JOIN [Product].[dbo].[Department] d ON ct.DepartmentID = d.DepartmentID
JOIN [Product].[dbo].[Segment] sg ON d.SegmentID = sg.SegmentID --
JOIN [Product].[dbo].[Item] i ON s.styleid = i.styleid
JOIN [Product].[dbo].[ItemColour] ic ON i.itemid = ic.itemid
JOIN [Product].[dbo].[Colour] c ON ic.colourid = c.colourid
JOIN [Product].[dbo].[ItemSize] isz ON i.itemid = isz.itemid
JOIN [Product].[dbo].[Size] sz ON isz.sizeid = sz.sizeid
JOIN [Product].[dbo].[SeasonItem] si ON i.itemid = si.itemid
JOIN [Product].[dbo].[Season] se ON se.seasonid = si.seasonid
JOIN [product].[dbo].[ItemMPLANReference] pn ON pn.itemid = i.itemid
JOIN [Product].[dbo].[Product_Staging_CategoryImportMap] ci ON ci.CategoryID = ct.CategoryID
JOIN [SAPurchaseOrder].[dbo].[tblPO1Detail] pod ON pn.EDP = pod.strItemNo
WHERE se.seasonid IN (@SeasonId)
and EDP not in (SELECT skuEDP from USCarrier.dbo.WHDespatchSku)
ORDER BY 1
この問題は解決されました。どうやってやったのですか?
クエリプランを確認したところ、インデックスの欠落に気づきました。
USE [SAPurchaseOrder]
GO
CREATE NONCLUSTERED INDEX [idx_strItemNo]
ON [dbo].[tblPO1Detail] ([strItemNo])
GO
インデックスを追加した後、レポートは再び正常に機能し始めました。
実際に起こったと思うのは、SSRSがクエリ実行プランをキャッシュしていて、パラメータースニッフィングのケースがあったということです。インデックスを作成すると、プランはキャッシュから削除され、再コンパイルする必要がありました。
これは、この質問と非常に似ています: SQLはSSRSでは遅く実行されますが、SSMSでは速く実行されます
上記の質問から私が有用だと思う良いことの1つは、パラメーターの盗聴の可能性を排除する方法です。
コメントで説明したように、パラメーターを削除して、クエリがパラメータースニッフィングの影響を受けているかどうかを確認しましょう。
これを行うには、最初からSQLステートメントを作成します。 SSRSのほとんどのものは、SQLクエリを含む式にすることができるため、文字列として構築できます。パラメータを使用して、JOINを使用してカンマ区切りのリストに変換します。
質問は残ります:
ロードでスタックするSSRS 2014レポートのトラブルシューティングを行うにはどうすればよいですか?
sSRS 2014ログはどこにありますか?
実行ログを確認する必要があります。レポートサーバーデータベースには、ExecutionLog3というビューがあります。このビューを日付で照会し、ユーザーがレポートを実行した方法を見つけることができます。
USE [ReportServer]
GO
SELECT *
FROM dbo.ExecutionLog3 AS el
WHERE el.TimeStart >= '2016-08-02'
SSRS再現では、実際に3つの点を確認する必要があります。IISログ、SSRSログ、データベースのプロファイルを作成します。
IISログには、サイトにIIS問題がある場合に表示されます。おそらく問題ではありませんが、念のため確認しても問題はありません。接続に問題がある可能性があるため、IISアプリプールとログを確認して、これを除外してください。
Arthur Dが言及しているように、executionlog3ビューは、リクエストがレポートデータベースに到達したかどうかと、何が起こったかを示します。
上記の両方で問題が解決しない場合は、データベースをプロファイリングして、リクエストがデータベースに対して行っているかどうかを確認します。