0

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

レポート サービスを継続して実行したいので、そのサービスを停止できないことに注意してください。無駄な要求の送信を停止したいだけです。

前もって感謝します

4

0 に答える 0