SSRS报告需要近10分钟才能呈现报告

时间:2017-06-09 12:15:01

标签: sql-server sql-server-2008 reporting-services

我们有一个运行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生成。每次显示报告都需要花费大量时间。

我检查的要点是:

  1. 64 GB RAM
  2. Xeon Processor
  3. 平均内存利用率18 GB(可用内存> 40 GB)
  4. 数据集返回大约4000行。我想这很容易被4 GB RAM服务器处理。
  5. 应用程序,数据库服务器,SSRS服务器都在同一台计算机上。
  6. 活动监视器在生成此查询时显示一个暂停的查询。

    ReportServer.dbo.GetSessionData; 1

    我可以看到昂贵或等待的查询是: EXEC #am_get_querystats

    检查数据库上的资源锁定,这表明ReportServer.dbo.GetSessionData; 1被ReportServer.dbo.WriteLockSession阻止; 1。这将持续约2分钟,锁定被释放,报告完成生成。

    排查问题我尝试了

    1. 重新启动SSRS服务.. SQL服务。所有4项服务,包括代理和浏览器。
    2. 重新启动服务器
    3. 重建服务器上的所有索引。检查执行计划以及是否缺少任何索引。创造了它。
    4. 停用所有正在运行的作业。
    5. 使用报告生成器和浏览器直接在服务器上生成报告。
    6. 没有任何帮助。

      以下是活动监视器

      的屏幕截图

      screenshot1 screenshot2

      任何人都知道为什么在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
      

1 个答案:

答案 0 :(得分:0)

第一步是找出花费这么多时间的内容,您可以使用ReportServer数据库的 ExecutionLog3 视图找到它。 此视图包含TimeDataRetrieval,TimeProcessing和TimeRendering列,您可以按TimeStart和ItemPath对其进行过滤。

一旦你知道它可以让你可以调查分页。 相反,它是TimeDataRetrieval,而不是你应该调整你的查询

相关问题