SSRS 2014 - 在 Management Studio 上執行良好的查詢 - 報告超時 - 如何進行故障排除?
我在 2014 年報告服務中遇到問題 - 報告中的所有查詢在管理工作室執行良好,但在執行報告時超時。
這是來自使用者的消息:
如何解決 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 中執行很快
我認為上述問題有用的一件好事是如何消除參數嗅探的可能性:
正如評論中所討論的,讓我們擺脫參數以查看您的查詢是否受到參數嗅探的影響。
為此,我們從頭開始建構 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 報告,實際上需要查看三件事:IIS 日誌、SSRS 日誌、數據庫分析。
IIS 日誌將顯示該站點是否存在 IIS 問題,可能不是您的問題,但檢查以防萬一。您可能會遇到連接問題,因此請檢查您的 IIS 應用程序池和日誌以排除此問題。
正如 Arthur D 所提到的,executionlog3 視圖將向您顯示請求是否已發送到報告數據庫以及發生了什麼。
如果上述兩種方法仍然沒有幫助,那麼 Profile the database 並查看您的請求是否已發送到數據庫。