Sql-Server

SSRS 2014 - 在 Management Studio 上執行良好的查詢 - 報告超時 - 如何進行故障排除?

  • August 2, 2016

我在 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 並查看您的請求是否已發送到數據庫。

引用自:https://dba.stackexchange.com/questions/145605