更新:對不起!由於舊的描述,我可能會誤導你。遷移後問題並不存在,遷移後1周纔開始出現問題遷移後SQL Server Reporting Services速度很慢
我們最近將數據庫和報表服務器遷移到新的數據庫服務器和新的報表服務器。
配置之前:
- 數據庫服務器:2008企業,DB01/NamedInstance
- 報表服務器:同一臺服務器作爲數據庫服務器,本機模式下,數據庫的憑據是 NT AUTHORITY \ NETWORK SERVICE
配置現在:
- 數據庫服務器:2012企業,DC01(默認情況下,未命名 實例)
- 報告服務:移動到RP01(本機模式),數據庫 憑據是SQL賬戶(SA)
的遷移遵循MSDN遷移指令並最終運行(儘管我們必須手動刪除一個冗餘擴展部署服務器(與舊服務器名稱相同)才能使其工作,我認爲這是SSRS缺陷)。
遷移後1周,報告在新報告服務器上開始運行非常緩慢。
所以我做了如下分析:
執行舊報表服務器的報告(報告點數據庫連接到新的數據庫服務器)和新的報表服務器,舊的報表服務器運行速度快與之前一樣(1秒),但新報表服務器運行速度非常慢(31秒)。
直接執行報表調用的存儲過程,它的速度非常快(50毫秒)。
診斷[ReportServer $ Instance]。[dbo]。[ExecutionLog]數據庫,TimeDataRetrival在舊服務器中爲50毫秒,而在新服務器中爲30050毫秒。
運行SQL Server Profiler,在舊的服務器上執行報告,一切似乎都很好。在新服務器中執行報告,引起了我的注意。在每批次的最後一個事件發生後,在「審覈註銷」生成之前,它將「掛起」(長時間運行)很長時間。下面的示例實際運行10秒,但所有語句實際運行時間不到1秒。
我懷疑: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.這裏的場景是報表沒有改變,它在舊的報表服務器上運行良好,但在新的報表服務器上運行緩慢。 2. SP已經有本地變量以避免嗅探 – unruledboy
我知道報告沒有改變,SQL Server的每個實例都可以根據硬件和設置採取不同的行爲。你是說運行SSRS服務的服務器改變了,但是託管數據庫的服務器沒有改變? – influent
您是否嘗試添加OPTION(RECOMPILE)或其他提示? – influent