SQL Server Profiler を使用して、SQL Server データベース リクエストを監視しました。データベースは 5 秒ごとに 2 つのバッチ リクエストを送信すると考えましたReportServer
。下の画像を参照してください。
また、ローカルデータベースエンジンでも試して、ユーザーからレポートが呼び出されていないことを確認しましたが、サーバーと同じように5秒ごとにリクエストが送信されています
すべてのリクエストで同じ2つのリクエストの内容を読み取り、そのうちの1つがデータベースevent
のテーブルを更新し、テーブルReportServer
から上位8つを選択しますevent
別の 1 つのテーブルを更新 し、他の 3 つのテーブルと結合されたテーブルnotification
から上位 8 つを選択しますnotification
プロファイラーの textData 列内のコード (バッチ クエリ) は次のとおりです。
リクエスト 1:
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]
リクエスト 2:
declare @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], SR.[SubscriptionResult]
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
LEFT OUTER JOIN
[SubscriptionResults] SR ON N.[SubscriptionID] = SR.[SubscriptionID]
AND CHECKSUM(convert(nvarchar(max), N.[ExtensionSettings])) = SR.[ExtensionSettingsHash]
WHERE
N.[BatchID] = @BatchID
ORDER BY
[NotificationEntered]
最初に、これらの迷惑なリクエストが 5 秒ごとに送信される原因を知りたいのですが、すべてのリクエストの両方の選択の結果が空であり、レポート サービスへの実際のリクエストがありません (そうではないようです)。イベント テーブルと通知テーブルの両方が空であるため、何か特別なことを行います)
次に、データベースから 5秒ごとに無駄なリクエスト ** を送信するこの手順を停止するにはどうすればよいですか?ReportServer
レポート サービスを継続して実行したいので、そのサービスを停止できないことに注意してください。無駄な要求の送信を停止したいだけです。
前もって感謝します