2013-04-16 95 views
3

更新:对不起!由于旧的描述,我可能会误导你。迁移后问题并不存在,迁移后1周才开始出现问题迁移后SQL Server Reporting Services速度很慢

我们最近将数据库和报表服务器迁移到新的数据库服务器和新的报表服务器。

配置之前:

  • 数据库服务器:2008企业,DB01/NamedInstance
  • 报表服务器:同一台服务器作为数据库服务器,本机模式下,数据库的凭据是 NT AUTHORITY \ NETWORK SERVICE

配置现在:

  • 数据库服务器:2012企业,DC01(默认情况下,未命名 实例)
  • 报告服务:移动到RP01(本机模式),数据库 凭据是SQL账户(SA)

的迁移遵循MSDN迁移指令并最终运行(尽管我们必须手动删除一个冗余扩展部署服务器(与旧服务器名称相同)才能使其工作,我认为这是SSRS缺陷)。

迁移后1周,报告在新报告服务器上开始运行非常缓慢。

所以我做了如下分析:

  1. 执行旧报表服务器的报告(报告点数据库连接到新的数据库服务器)和新的报表服务器,旧的报表服务器运行速度快与之前一样(1秒),但新报表服务器运行速度非常慢(31秒)。

  2. 直接执行报表调用的存储过程,它的速度非常快(50毫秒)。

  3. 诊断[ReportServer $ Instance]。[dbo]。[ExecutionLog]数据库,TimeDataRetrival在旧服务器中为50毫秒,而在新服务器中为30050毫秒。

  4. 运行SQL Server Profiler,在旧的服务器上执行报告,一切似乎都很好。在新服务器中执行报告,引起了我的注意。在每批次的最后一个事件发生后,在“审核注销”生成之前,它将“挂起”(长时间运行)很长时间。下面的示例实际运行10秒,但所有语句实际运行时间不到1秒。

  5. 我怀疑:a)。某些配置(如帐户访问权限)在未经我确认的情况下已更改B)。新的报表服务器正在尝试验证没有正确访问权限的用户,并在替代解决方案之前“暂停”数秒。

分析器输出的开始时间:


审核登录 - 网络协议:上 组TCP/IP SET QUOTED_IDENTIFIER ARITHABORT关闭 组NUMERIC_ROUNDABORT关闭 SET ANSI_WARNINGS上 SET ANSI_PADDING 设置ansi_nulls为 set concat_null_yields_null on set cursor_close_on_commit off 个集IMPLICIT_TRANSACTIONS关闭 集语言美国英语 设定的日期格式MDY 集DATEFIRST 7 组的事务隔离级别读取承诺

报表服务器SA 1440 100 2013年4月16日16:10:14.393 0X2000002838F4010000000000


SQL:BatchStarting
declare @BatchID uniqueidentifier

         set @BatchID = NEWID() 

             UPDATE [Event] WITH (TABLOCKX) 
              SET [BatchID] = @BatchID, 
              [ProcessStart] = GETUTCDATE(), 
              [ProcessHeartbeat] = GETUTCDATE() 
             FROM (
              SELECT TOP 8 [EventID] FROM [Event] WITH (TABLOCKX) WHERE [ProcessStart] is NULL ORDER BY [TimeEntered] 
              ) AS t1 
             WHERE [Event].[EventID] = t1.[EventID] 

             select top 8 
              E.[EventID], 
              E.[EventType], 
              E.[EventData] 
             from 
              [Event] E WITH (TABLOCKX) 
             where 
              [BatchID] = @BatchID 
             ORDER BY [TimeEntered] 

报表服务器SA 1440 100 2013年4月16日16:10:14.393


SQL:BatchCompleted
声明@BatchID唯一标识符

         set @BatchID = NEWID() 

             UPDATE [Event] WITH (TABLOCKX) 
              SET [BatchID] = @BatchID, 
              [ProcessStart] = GETUTCDATE(), 
              [ProcessHeartbeat] = GETUTCDATE() 
             FROM (
              SELECT TOP 8 [EventID] FROM [Event] WITH (TABLOCKX) WHERE [ProcessStart] is NULL ORDER BY [TimeEntered] 
              ) AS t1 
             WHERE [Event].[EventID] = t1.[EventID] 

             select top 8 
              E.[EventID], 
              E.[EventType], 
              E.[EventData] 
             from 
              [Event] E WITH (TABLOCKX) 
             where 
              [BatchID] = @BatchID 
             ORDER BY [TimeEntered] 
              Report Server  sa 0 7 0 0 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:14.393  

SQL:BatchStarting
声明@ BatchID uniqueidentifier

       set @BatchID = newid() 

           UPDATE [Notifications] WITH (TABLOCKX) 
            SET [BatchID] = @BatchID, 
            [ProcessStart] = GETUTCDATE(), 
            [ProcessHeartbeat] = GETUTCDATE() 
           FROM (
            SELECT TOP 8 [NotificationID] FROM [Notifications] WITH (TABLOCKX) WHERE ProcessStart is NULL and 
            (ProcessAfter is NULL or ProcessAfter < GETUTCDATE()) ORDER BY [NotificationEntered] 
           ) AS t1 
           WHERE [Notifications].[NotificationID] = t1.[NotificationID] 

           select top 8 
             -- Notification data 
             N.[NotificationID], 
             N.[SubscriptionID], 
             N.[ActivationID], 
             N.[ReportID], 
             N.[SnapShotDate], 
             N.[DeliveryExtension], 
             N.[ExtensionSettings], 
             N.[Locale], 
             N.[Parameters], 
             N.[SubscriptionLastRunTime], 
             N.[ProcessStart], 
             N.[NotificationEntered], 
             N.[Attempt], 
             N.[IsDataDriven], 
             SUSER_SNAME(Owner.[Sid]), 
             Owner.[UserName], 
             -- Report Data 
             O.[Path], 
             N.[ReportZone], 
             O.[Type], 
             SD.NtSecDescPrimary, 
             N.[Version], 
             Owner.[AuthType] 
            from 
             [Notifications] N with (TABLOCKX) inner join [Catalog] O on O.[ItemID] = N.[ReportID] 
             inner join [Users] Owner on N.SubscriptionOwnerID = Owner.UserID 
             left outer join [SecData] SD on O.[PolicyID] = SD.[PolicyID] AND SD.AuthType = Owner.AuthType 
            where 
             N.[BatchID] = @BatchID 
           ORDER BY [NotificationEntered] 

报告服务器1440 SA 100 2013年4月16日16:10:14.393


SQL:BatchCompleted
声明@BatchID唯一标识符

       set @BatchID = newid() 

           UPDATE [Notifications] WITH (TABLOCKX) 
            SET [BatchID] = @BatchID, 
            [ProcessStart] = GETUTCDATE(), 
            [ProcessHeartbeat] = GETUTCDATE() 
           FROM (
            SELECT TOP 8 [NotificationID] FROM [Notifications] WITH (TABLOCKX) WHERE ProcessStart is NULL and 
            (ProcessAfter is NULL or ProcessAfter < GETUTCDATE()) ORDER BY [NotificationEntered] 
           ) AS t1 
           WHERE [Notifications].[NotificationID] = t1.[NotificationID] 

           select top 8 
             -- Notification data 
             N.[NotificationID], 
             N.[SubscriptionID], 
             N.[ActivationID], 
             N.[ReportID], 
             N.[SnapShotDate], 
             N.[DeliveryExtension], 
             N.[ExtensionSettings], 
             N.[Locale], 
             N.[Parameters], 
             N.[SubscriptionLastRunTime], 
             N.[ProcessStart], 
             N.[NotificationEntered], 
             N.[Attempt], 
             N.[IsDataDriven], 
             SUSER_SNAME(Owner.[Sid]), 
             Owner.[UserName], 
             -- Report Data 
             O.[Path], 
             N.[ReportZone], 
             O.[Type], 
             SD.NtSecDescPrimary, 
             N.[Version], 
             Owner.[AuthType] 
            from 
             [Notifications] N with (TABLOCKX) inner join [Catalog] O on O.[ItemID] = N.[ReportID] 
             inner join [Users] Owner on N.SubscriptionOwnerID = Owner.UserID 
             left outer join [SecData] SD on O.[PolicyID] = SD.[PolicyID] AND SD.AuthType = Owner.AuthType 
            where 
             N.[BatchID] = @BatchID 
           ORDER BY [NotificationEntered] 

报告服务器SA 0 7 0 0 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:14.393


审核退出
举报服务器sa 0 3836 6 10140 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:24.533

回答

1

好的,我想我想出了如何解决它。我修改了报告文件(.rdl)并上传到新的报告服务器以覆盖现有的报告文件,它按预期快速运行。

我怀疑是因为我们使用数据库备份/恢复将SSRS 2008迁移到SSRS 2012,并且SSRS 2012没有自动升级文件格式,导致了问题。

1

您是否已经从等式中消除了参数嗅探?

Fast query runs slow in SSRS

尝试增加之初给他们由相应的参数传递的价值观假参数匹配到存储过程,然后。查看报告是否以这种方式运行得更快。

+0

1.这里的场景是报表没有改变,它在旧的报表服务器上运行良好,但在新的报表服务器上运行缓慢。 2. SP已经有本地变量以避免嗅探 – unruledboy

+0

我知道报告没有改变,SQL Server的每个实例都可以根据硬件和设置采取不同的行为。你是说运行SSRS服务的服务器改变了,但是托管数据库的服务器没有改变? – influent

+0

您是否尝试添加OPTION(RECOMPILE)或其他提示? – influent