Sql server SQL Server Reporting Services迁移后速度非常慢

Sql server SQL Server Reporting Services迁移后速度非常慢,sql-server,ssrs-2008,reporting-services,Sql Server,Ssrs 2008,Reporting Services,更新:对不起!我可能因为旧的描述而误会了你。迁移后问题不存在,迁移后1周开始出现问题 我们最近将数据库和报表服务器迁移到一个新的数据库服务器和一个新的报表服务器 之前的配置: 数据库服务器:2008企业版,DB01/NamedInstance 报表服务器:与数据库服务器相同的服务器,本机模式,数据库凭据为 NT授权\网络服务 立即配置: 数据库服务器:2012 Enterprise,DC01(默认实例,未命名 (实例) Reporting Services:移动到RP01(本机模式),数据

更新:对不起!我可能因为旧的描述而误会了你。迁移后问题不存在,迁移后1周开始出现问题

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

之前的配置:

  • 数据库服务器:2008企业版,DB01/NamedInstance
  • 报表服务器:与数据库服务器相同的服务器,本机模式,数据库凭据为 NT授权\网络服务
立即配置:

  • 数据库服务器:2012 Enterprise,DC01(默认实例,未命名 (实例)
  • Reporting Services:移动到RP01(本机模式),数据库 凭据是SQL帐户(sa)
迁移遵循MSDN迁移说明并最终起作用(尽管我们不得不手动删除一个redunant横向扩展部署服务器(与旧服务器同名),以使其工作,我认为这是SSRS错误)

迁移后1周,新报表服务器上的报表运行速度开始极慢

所以我做了以下分析:

  • 在旧报表服务器(报表的数据库连接指向新数据库服务器)和新报表服务器中执行报表,旧报表服务器的运行速度与以前一样快(1秒),但新报表服务器的运行速度非常慢(31秒)

  • 直接执行报表调用的存储过程,速度与以前一样快(50毫秒)

  • 诊断[ReportServer$Instance].[dbo].[ExecutionLog]数据库,TimeDataRetrieval在旧服务器中为50毫秒,但在新服务器中为30050毫秒

  • 运行SQL Server Profiler,在旧服务器中执行报告,一切正常。在新服务器上执行报告时,我注意到了一些事情。在每个批处理的最后一个事件之后,它将“挂起”(运行)很长一段时间,然后生成“审核注销”。下面的示例实际运行10秒,但所有语句实际运行不到1秒

  • 我怀疑:a)。某些配置(如帐户访问)已在未经我确认的情况下更改。b) 。新的报表服务器正在尝试对没有正确访问权限的用户进行身份验证,并在替代解决方案之前在那里“挂起”几秒钟

  • 启动探查器输出:


    审核登录--网络协议:TCP/IP 在上设置带引号的\u标识符 抵消阿里沙波特 将数字_roundabort设置为off 将ansi_警告设置为on 将ansi_填充设置为on 将ansi_空值设置为on 将concat\u null\u设置为 设置光标\u关闭\u打开\u关闭 设置隐式事务 设置语言为英语 设置日期格式mdy 把日期定在7号 设置事务隔离级别read COMMITED

    报表服务器sa 1440 100 2013-04-16 16:10:14.393 0x2000002838F401000000000


    SQL:BatchStarting
    声明@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]
    
                                            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     
    
                                    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]
    
                                    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 1440 100 2013-04-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]
    
                                            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     
    
                                    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]
    
                                    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]
    

    SQL:BatchStarting
    声明@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]
    
                                            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     
    
                                    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]
    
                                    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]
    
    set@BatchID=newid()
    使用(TABLOCKX)更新[通知]
    设置[BatchID]=@BatchID,
    [ProcessStart]=GETUTCDATE(),
    [ProcessHeartbeat]=GETUTCDATE()
    从(
    使用(TABLOCKX)从[Notifications]中选择前8位[NotificationID],其中ProcessStart为NULL,并且
    (ProcessAfter为NULL或ProcessAfter