検索
連載

拡張イベントセッションの一覧を出力するSQL Server動的管理ビューレファレンス(89)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、拡張イベントセッションの一覧を出力する方法について解説します。

Share
Tweet
LINE
Hatena

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_xe_sessions」における、拡張イベントセッションの一覧を出力する方法について解説します。対応バージョンは、SQL Server(サポートされている全てのバージョン)です。

概要

 SQL Serverでは拡張イベント(XEvent)の機能を使用することで、SQL Serverの内部で発生したイベントや付随する情報を記録して、パフォーマンス問題の解析や、問題の原因特定に必要なデータを収集できます。

 類似の機能として、以前からSQL Serverトレースがありました。拡張イベントはより新しい機能となり、採取パフォーマンスの改善や対象のイベント、収集できる情報の増加、記録方法の選択肢の増加がなされました。

 拡張イベントを収集するには、あらかじめ拡張イベントセッションを構成して、採取対象とするイベントや含める情報、記録先などを設定しておく必要があります。そして、拡張イベントを採取する期間にあわせて、拡張イベントセッションを開始、停止します。

 「sys.dm_xe_sessions」動的管理ビューでは、構成された拡張イベントセッションの一覧情報を出力します。この一覧には、拡張イベントセッションのバッファーサイズやバッファーがいっぱいになった場合の動作設定など、拡張イベントセッションに関する構成情報が含まれます。拡張イベントセッションに構成されたイベントや出力先のターゲットの情報については含まれませんので、別の拡張イベントセッションに関連した動的管理ビューを使用して確認する必要があります。

出力内容

列名 データ型 説明
address varbinary(8) セッションのメモリアドレス。ローカルシステム全体で一意
name nvarchar(256) セッションの名前。名前はローカルシステム全体で一意
pending_buffers int 処理を保留しているバッファーの最大数
total_regular_buffers int 標準バッファーの合計数
regular_buffer_size bigint 標準バッファーのサイズ(バイト単位)
total_large_buffers int ラージイベント用のバッファー(ラージバッファー)の合計数
large_buffer_size bigint ラージバッファーのサイズ(バイト単位)
total_buffer_size bigint メモリバッファーの合計サイズ(バイト単位)
buffer_policy_flags int 全てのバッファーがいっぱいになり、新しいイベントが発生した場合のセッションイベントバッファーの動作を示すビットマップ
buffer_policy_desc nvarchar(256) 「buffer_policy_flags」の説明
 Drop event
 Do not drop events
 Drop full buffer
 Allocate new buffer
flags int セッションに設定されているフラグを示すビットマップ
flag_desc nvarchar(256) 「flags」の説明。次の値の組み合わせ
 Flush buffers on close
 Dedicated dispatcher
 Allow recursive events
dropped_event_count int バッファーがいっぱいになったときに削除されたイベントの数。バッファーポリシーが「Drop full buffer」「Do not drop events」の場合は「0」
dropped_buffer_count int バッファーがいっぱいになったときに削除されたバッファーの数。バッファーポリシーが「Drop event」「Do not drop events」に設定されている場合は「0」
blocked_event_fire_time int バッファーがいっぱいになったときにイベントの実行がブロックされた時間の長さ。バッファーポリシーが「Drop full buffer」「Drop event」の場合は「0」
create_time datetime セッションが作成された時刻
largest_event_dropped_size int セッションバッファーに収まらなかったイベントの最大サイズ

動作例

 拡張イベントセッションを作成して「sys.dm_xe_sessions」動的管理ビューを出力します。作成した拡張イベントセッションは表示されませんでした(図1、図2)。

図1
図1 「XESESSION01」という名前の拡張イベントセッションを作成したところ
図2
図2 作成した拡張イベントセッションが出力されなかった

 開始していない拡張イベントセッションは表示されないようです。拡張イベントセッションを開始して「sys.dm_xe_sessions」動的管理ビューを出力します(図3)。

図3
図3 拡張イベントセッションを開始すると情報が表示された

 拡張イベントセッションのアドレスや名前と併せてバッファーに関する情報なども表示されました。構成に関する情報は拡張イベントセッション作成時に設定した情報と大部分は同じですが、バッファーサイズについては画面での設定値とは一致しないようです(図4)。

図4
図4 拡張イベントセッションの詳細設定を表示したところ

 次に、イベントの欠落についての情報を確認するため、ターゲットに「event_file」を構成した状態で大量のイベントを発生させました。「sys.dm_xe_sessions」動的管理ビューを出力すると「dropped_buffer_count」列の値が増加しており、イベントの損失が発生したことが分かりました(図5)。

図5
図5 「dropped_buffer_count」列の値からイベントの損失が発生していることが分かる

 イベントの損失が発生した場合にも「event_file」ターゲットにはイベントの損失の情報は記録されません。イベントの損失を見逃せない場合には、拡張イベントだけでなく「sys.dm_xe_sessions」動的管理ビューを確認すると良さそうです。

※本Tipsは、「Windows Server 2019」上に「SQL Server 2019」をインストールした環境を想定して解説しています。

筆者紹介

椎名 武史(しいな たけし)

日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。

伊東 敏章(いとう としあき)

日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る