更新:申し訳ありません!古い説明のせいで誤解を招いてしまったかもしれません。移行直後は問題がなく、移行の 1 週間後に問題が発生し始めました
最近、データベースとレポート サーバーを新しいデータベース サーバーと新しいレポート サーバーに移行しました。
以前の構成:
- データベース サーバー: 2008 Enterprise、DB01/NamedInstance
- レポート サーバー: データベース サーバーと同じサーバー、ネイティブ モード、データベース資格情報は NT AUTHORITY\NETWORK SERVICE
現在の構成:
- データベース サーバー: 2012 Enterprise、DC01 (既定のインスタンス、名前付きインスタンスではありません)
- Reporting Services: RP01 (ネイティブ モード) に移動、データベース資格情報は SQL アカウント(sa)
移行は MSDN の移行手順に従っており、最終的に機能します (ただし、冗長なスケールアウト展開サーバー (古いサーバーと同じ名前) を手動で削除して機能させる必要がありましたが、これは SSRS のバグだと思います)。
移行の 1 週間後、新しいレポート サーバーでレポートの実行が非常に遅くなり始めました。
そこで、次の分析を行いました。
古いレポート サーバー (レポートのデータベース接続が新しいデータベース サーバーを指す) と新しいレポート サーバーでレポートを実行すると、古いレポート サーバーは以前と同じように高速に実行されます (1 秒) が、新しいレポート サーバーの実行は非常に遅くなります (31 2番目)。
レポートが呼び出すストアド プロシージャを直接実行します。以前と同様に非常に高速です (50 ミリ秒)。
診断 [ReportServer$Instance].[dbo].[ExecutionLog] データベース、TimeDataRetrival は古いサーバーでは 50 ミリ秒ですが、新しいサーバーでは 30050 ミリ秒です。
SQL Server プロファイラーを実行し、古いサーバーでレポートを実行すると、すべて問題ないようです。新しいサーバーでレポートを実行すると、何かが気になりました。各バッチの最後のイベントの後、「監査ログアウト」が生成される前に、長時間「ハング」(実行) します。以下のサンプルは実際には 10 秒間実行されますが、すべてのステートメントは実際には 1 秒未満実行されます。
私はそれを疑っています:a)。アカウント アクセスなどの一部の構成が、私の承認なしに変更されました。b)。新しいレポート サーバーは、適切なアクセス権を持っていないユーザーを認証しようとしており、別の解決策の前に数秒間「ハング」しています。
プロファイラー出力の開始:
監査ログイン -- ネットワーク プロトコル: TCP/IP set quoted_identifier on set arithabort off set numeric_roundabort off set ansi_warnings on set ansi_padding on set ansi_nulls on set concat_null_yields_null on set cursor_close_on_commit off set implicit_transactions off set language us_english set dateformat mdy set datefirst 7 set transaction isolation levelコミットされた読み取り
レポート サーバー sa 1440 100 2013-04-16 16:10:14.393 0X2000002838F4010000000000
SQL:BatchStarting は
@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-04-16 16:10:14.393
SQL:BatchCompleted
は @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]
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]
レポート サーバー sa 1440 100 2013-04-16 16:10:14.393
SQL:BatchCompleted
は @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]
レポート サーバー 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