【发布时间】:2013-04-16 06:56:06
【问题描述】:
更新:对不起!由于旧的描述,我可能误导了你。迁移后问题不存在,迁移后 1 周开始出现
我们最近将数据库和报表服务器迁移到了新的数据库服务器和新的报表服务器。
之前的配置:
- 数据库服务器:2008 Enterprise,DB01/NamedInstance
- 报表服务器:与数据库服务器相同的服务器,本机模式,数据库凭据为 NT AUTHORITY\网络服务
现在的配置:
- 数据库服务器:2012 Enterprise,DC01(默认实例,未命名 实例)
- Reporting Services:移至 RP01(本机模式),数据库 凭据是 SQL 帐户(sa)
迁移遵循 MSDN 迁移说明并最终运行(尽管我们必须手动删除冗余的横向扩展部署服务器(与旧服务器同名)以使其正常运行,我认为这是 SSRS 错误)。
迁移 1 周后,新报表服务器上的报表开始运行异常缓慢。
于是我做了如下分析:
在旧报表服务器(报表的数据库连接指向新数据库服务器)和新报表服务器中执行报表,旧报表服务器运行速度和以前一样快(1秒),但新报表服务器运行速度极慢(31 秒)。
直接执行报表调用的存储过程,速度和以前一样快(50毫秒)。
诊断 [ReportServer$Instance].[dbo].[ExecutionLog] 数据库,TimeDataRetrival 在旧服务器中为 50 毫秒,但在新服务器中为 30050 毫秒。
运行 SQL Server Profiler,在旧服务器上执行报告,一切正常。在新服务器上执行报告,引起了我的注意。在每批的最后一个事件之后,它会“挂起”(运行)很长时间,然后才会生成“审计注销”。下面的示例实际运行了 10 秒,但所有语句实际运行了不到 1 秒。
我怀疑:a)。某些配置(例如帐户访问权限)已在未经我确认的情况下更改。乙)。新的报表服务器正在尝试对没有适当访问权限的用户进行身份验证,并在替代解决方案之前“挂起”几秒钟。
分析器输出开始:
审核登录 -- 网络协议:TCP/IP 设置quoted_identifier on 关闭 arithabort 设置 numeric_roundabort 关闭 设置 ansi_warnings on 设置 ansi_padding 设置 ansi_nulls 将 concat_null_yields_null 设置为 设置 cursor_close_on_commit 关闭 设置implicit_transactions 关闭 设置语言 us_english 设置日期格式 mdy 设置日期优先 7 设置事务隔离级别读取提交
报表服务器 sa 1440 100 2013-04-16 16:10:14.393 0X2000002838F4010000000000
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]
报表服务器 sa 1440 100 2013-04-16 16:10:14.393
SQL:批量完成
声明@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 唯一标识符
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:批量完成
声明@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
【问题讨论】:
标签: sql-server ssrs-2008 reporting-services