SQL Server拡張イベントデータの視覚化


16

最近、SQL Serverの拡張イベントを使用して、さまざまなクエリのベンチマークと最適化に役立てています。これまでのところ、イベントデータを表示するには、SSMSの「ライブデータの監視」機能を使用していました。

私が抱えている問題は、ライブイベント機能が内部バッファーを使用しているように見えることです。つまり、クエリを数回実行して、情報をウィンドウに表示する必要がある場合があります。したがって、2つの部分からなる質問があります。

  1. ライブフィードにイベントを表示する際のこの遅延を回避する方法はありますか?(私はローカルデータベースでこれを行っているので、パフォーマンスは問題になりません)
  2. ライブフィードは、拡張イベントデータを視覚化する最良の方法ですか?SSMSには、ユースケースに適した別のツールがありますか?

更新

要求に応じて、セッションは次のとおりです。

CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER 
ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1)
    ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text)
    WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) 
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
GO

回答:


15

警告:以下に提供される情報の多くは、ジョナサン・ケイヘイアスによる2つのPluralsightコースを厳密に学習したことから学んだものです。プラスサブスクリプションの1か月分の費用は、彼の2つのコースを受講する価値があります。

まず、役立つと思われるいくつかの興味のあるポイント(またはせいぜい興味がある):

  • 拡張イベントセッションが開始されると、セッションのイベントによって生成されたデータを保存するために、メモリの一部がバッファスペースに割り当てられます。セッションでは、これはデフォルト値の4MBに設定されます
  • 使用可能な複数のターゲットがあります。これらのターゲットは、データを受信する方法synchronousまたはasynchronousその方法です。ターゲットファイルとリングバッファである2つの最も一般的に使用されるターゲットは両方とも非同期です。ここのBOLの記事は、各ターゲットのタイプを示しています。
  • MAX_DISPATCH_LATENCYコントロールは、イベント・データをターゲット(複数可)にディスパッチされた構成オプションです。ディスパッチは非同期ターゲットに対してのみ発生します。イベントデータがディスパッチされる原因となる2つの条件があります。(1)セッションのメモリバッファーがいっぱいであるか、(2)バッファー内のイベントデータがセッションのMAX_DISPATCH_LATENCY構成済みオプションを超えています。
  • ライブデータビューアーを開くと、「ストリーミングターゲット」と呼ばれる追加のターゲットがイベントセッションに追加されます。これは、メモリバッファがディスパッチされるときにライブイベントストリームを受け取ります。また、セッションのリアルタイムに近いビューを取得するために、セッションに関連付けられたディスパッチ遅延を実際に3秒に変更します。

質問の特定のポイントへ:

私が抱えている問題は、ライブイベント機能が内部バッファーを使用しているように見えることです。つまり、クエリを数回実行して、情報をウィンドウに表示する必要がある場合があります。したがって、2つの部分からなる質問があります

上記のこと以外にこれを行うことを認識していません。イベントがキャプチャされ、ライブデータビューアーにディスパッチするために必要なしきい値を満たしていないことが予想されます。次のクエリでテストしましたAdventureWorks2012

SELECT * FROM dbo.ErrorLog
WAITFOR DELAY '00:00:01' ;
GO

AdventureWorks2012ローカルインスタンス上のデータベースのデータのみをキャプチャするためにフィルタリングしていることを除いて、イベントセッション構成を使用して、このセッションのターゲットデータを表示し、クエリがキャプチャされたことを見つけることができます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

このクエリをもう一度実行すると、最終的にクエリがディスパッチされ、データビューアに1つのイベントが表示されます。表示されているすべてのイベントを実際に表示したい場合は、単にSTOPセッションとバッファーが完全にディスパッチされます。セッションを停止すると、これが表示されます。

ここに画像の説明を入力してください

1.ライブフィードにイベントを表示する際にこの遅延を回避する方法はありますか?(私はローカルデータベースでこれを行っているので、パフォーマンスは問題になりません)

MAX_MEMORYイベントをキャプチャするための小さなバッファサイズを示すより低い値に変更できると思っていました。ただし、SQL Server 2012でこれに設定できる最小値は200KBであり、使用したクエリはその制限を満たしていないため、すぐにディスパッチされます。私ができることは、せいぜいバッファに到達し、キャプチャされた以前のイベントをディスパッチするクエリを実行することだけでした。

SELECT *
FROM Person.Person
ORDER BY EmailPromotion DESC;

2.ライブフィードは、拡張イベントデータを視覚化する最良の方法ですか?SSMSには、ユースケースに適した別のツールがありますか?

私が現在知っていることではありません。データが発生したらすぐにデータを取得する最善の方法は、ring_bufferターゲットのXMLをクエリし、それを完全に削除することです。上記の例を繰り返して、下のクエリを実行するとすぐにイベントが表示されます。

-- Create XML variable to hold Target Data
DECLARE @target_data XML
SELECT  @target_data = CAST([t].[target_data] AS XML)
FROM    [sys].[dm_xe_sessions] AS s
JOIN    [sys].[dm_xe_session_targets] AS t
        ON [t].[event_session_address] = [s].[address]
WHERE   [s].[name] = N'Simple Query Benchmarking' AND
        [t].[target_name] = N'ring_buffer' ;

-- Return the full XML document
--SELECT @target_data;

--Shred XMl to get needed data
SELECT  DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP), n.value('(@timestamp)[1]', 'datetime2')) AS [timestamp],
    n.value('(data[@name="duration"]/value)[1]', 'bigint') as duration,
    n.value('(action[@name="sql_text"]/value)[1]', 'varchar(max)') as sql_text
FROM @target_data.nodes('RingBufferTarget/event[@name=''sql_batch_completed'']') AS q(n)

ここに画像の説明を入力してください


3
非常に詳細な答えです。唯一のポイントであり、実際の議論よりも興味深いものです。あなたはジョナサン・ケハヤスに言及しました、そして、私は同意します、彼のPluralsightコースは1ヶ月の費用の100%価値があります。しかし、彼にはブログがあり、リングバッファターゲットいかに嫌いかについて語っています。これは、今度は変化していることので、多分、2014年からだったが、それは面白い読み取りました:sqlskills.com/blogs/jonathan/...
Kalmino

1

.Net 4.7.2には、ライブターゲットを使用する場合のイベント表示の初期遅延を減らす修正があります。


2
回答をサポートするためのリファレンスを提供していただけますか?現在、あなたの答えには多くのことは含まれていません。
ジョン別名hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.