我们有一个运行SQL Server 2012 (SQL Server 11.0.2100)
的开发服务器。我们在同一台服务器上运行多个项目时配置了单独的SSRS
实例。
SQL Server:WIN-SRVR \ SQL2012 SSRS实例:WIN-SRVR \ SQL2012SSRS
我们在2012年的实例中有一个数据库。 SSRS
实例数据集指向2012.
现在的情况是,当我们执行存储过程时,返回数据集所需的时间不到1秒。而同一报告在页面上渲染需要近10分钟。我试图直接从浏览器和报表生成器http:// WIN-SRVR/Reportserver2012
生成。每次显示报告都需要花费大量时间。
我检查的要点是:
活动监视器在生成此查询时显示一个暂停的查询。
ReportServer.dbo.GetSessionData; 1
我可以看到昂贵或等待的查询是: EXEC #am_get_querystats
检查数据库上的资源锁定,这表明ReportServer.dbo.GetSessionData; 1被ReportServer.dbo.WriteLockSession阻止; 1。这将持续约2分钟,锁定被释放,报告完成生成。
排查问题我尝试了
没有任何帮助。
以下是活动监视器
的屏幕截图
任何人都知道为什么在SQL查询没有时间的情况下会发生这种情况。但报表渲染需要花费大量时间来显示数据。
DECLARE @fromdate VARCHAR(50)
DECLARE @todate VARCHAR(50)
DECLARE @usagetypeid NVARCHAR(10)
DECLARE @paytype INT
DECLARE @userid INT
SET @fromdate = '01/01/2017'
SET @todate = '09/06/2017'
SET @usagetypeid = '0'
SET @paytype = 0
SET @userid = 1
SELECT CONVERT(VARCHAR, pb.PaymentDate, 103) AS PaymentDate ,
pm.OldFormNo AS PropertyFormNo ,
ROUND(CAST(pb.ReceiptNo AS NUMERIC), 0) AS ReceiptNo ,
ISNULL(pm.OwnerFirstName, '') + ' ' + ISNULL(pm.OwnerMiddleName, '')
+ ' ' + ISNULL(pm.OwnerLastName, '') AS UserPersonName ,
pm.OwnerFirstName AS 'OwnerFirstName' ,
pb.PaidAmount ,
pb.PayableAmount ,
pb.ChequeDDno AS ChequeNo ,
pb.BillPaymentId
FROM propertymaster pm
JOIN PropertyBillPayment pb ON pm.PropertyId = pb.PropertyId
WHERE pb.PaymentDate BETWEEN CONVERT(DATE, @fromdate)
AND CONVERT(DATE, @todate)
AND pm.UsageTypeId = CASE WHEN @usagetypeid = 0 THEN pm.UsageTypeId
ELSE @usagetypeid
END
AND pb.isDeleted = 0
AND pb.cancel = 0
ORDER BY pb.PaymentDate DESC
答案 0 :(得分:0)
第一步是找出花费这么多时间的内容,您可以使用ReportServer数据库的 ExecutionLog3 视图找到它。 此视图包含TimeDataRetrieval,TimeProcessing和TimeRendering列,您可以按TimeStart和ItemPath对其进行过滤。
一旦你知道它可以让你可以调查分页。 相反,它是TimeDataRetrieval,而不是你应该调整你的查询