こんばんは。今日は、SQL Serverの拡張イベントログについてちょっと調べてみたので、分かったことをまとめておきたいと思います。
ネットを探してもあまり記事をみつけられなかったので、同じ情報を探している方の参考になりましたら幸いです。
(SQL Server、覚えること多すぎ・・・笑)
Contents
拡張イベントログとは
- ユーザーがSQL Serverの問題の監視とトラブルシューティングに必要なデータを収集できる軽量のパフォーマンス監視システム
- SQL Server 2008で登場、2012以降で機能拡張され、SQL Server 2016でSQLトレース機能とSQL Server Profiler機能が非推奨となり代替として利用が推奨されるようになった
- 非公式通称「XEvent」
- 拡張イベントを使用すると、SQL システムとアプリケーションの内部操作の詳細を確認できる
- 利用するときには、”興味のある事象”と”システムにデータを報告させる方法”を指定する
うーん、とは言われてもどんなものかようわからん笑 というわけで次の章でまずは実際のものを見てみたいと思います。
ちなみに、こちらにも参考になる説明がありました。
トレースはもはや古い?SQL Server 2012 の拡張イベント(前編) (1/4)|EnterpriseZine(エンタープライズジン)
トレースはもはや古い?SQL Server 2012 の拡張イベント(後編) (1/4)|EnterpriseZine(エンタープライズジン)
ZOZOTOWNの冬セール負荷対策で実施したDBサーバーのCPUボトルネック調査手法 – ZOZO TECH BLOG
実際の拡張イベントログをみてみる
クイック スタート: SQL Serverの拡張イベント – SQL Server | Microsoft Docs
それでは、実際に拡張イベントログを取得してみたいと思います。今回は上のチュートリアルの通りに進めてみました。
SSMSの管理>セッションから新規セッションの作成にすすみ・・・
キャプチャするイベントとして「sql_statement_completed」を選択し・・・
フィルタ述語に演算子”LIKE”で値”%SELECT%HAVING%“を設定し(この句を含むsql_statement_completedのみをキャプチャする、という設定)・・・
event_fileの出力先を設定し・・・
ディスパッチの最大待機時間を3秒として設定完了。
作成したセッションを”開始”してキャプチャが始まった状態で、意図的にキャプチャされるようなクエリを実行。
## HAVING句の条件を3と2に変えて2回実行して、とガイドされているのでその通り実行。
SELECT
c.name,
Count(*) AS [Count-Per-Column-Repeated-Name]
FROM
sys.syscolumns AS c
JOIN sys.sysobjects AS o
ON o.id = c.id
WHERE
o.type = 'V'
AND
c.name like '%event%'
GROUP BY
c.name
HAVING
Count(*) >= 3 --2 -- Try both values during session.
ORDER BY
c.name;
実行が終わったら、セッションを”停止”して、紐づけられたイベントファイルを表示すると・・・キャプチャされたイベントの一覧が確認できました!
各イベントは、さらに詳細が見れて、cpu時間、実行時間や取得行数、発行されたSQL文などの情報が確認できるようになっています。
なるほど、実際にみてみて拡張イベントログのイメージがつきました。
なお、以下にあるように、上で実施したセッションの各操作は、T-SQLで完結させることもできます。
クイック スタート: SQL Serverの拡張イベント – SQL Server | Microsoft Docs
また、こうしたユーザが作成するセッション以外にも、規定で用意されているセッションもいくつかあり、トラブルシューティングに役立てることができます。
クイック スタート: SQL Serverの拡張イベント – SQL Server | Microsoft Docs
- AlwaysOn_health
- system_health
- telemetry_events
それぞれについては、再掲ですが以下記事に詳しくまとまっていました。
トレースはもはや古い?SQL Server 2012 の拡張イベント(前編) (1/4)|EnterpriseZine(エンタープライズジン)
トレースはもはや古い?SQL Server 2012 の拡張イベント(後編) (1/4)|EnterpriseZine(エンタープライズジン)
拡張イベントログの使いどころ
さて、拡張イベントログがどんなものかわかったところで、もう少し使いどころについて理解を深めていきたいと思います。
ここにかかれていますが・・・
クイック スタート: SQL Serverの拡張イベント – SQL Server | Microsoft Docs
ロックが多いオブジェクトをみつけたり・・・
拡張イベントを使用して、ロックが最も多いオブジェクトを検索する – SQL Server | Microsoft Docs
ロックを保持しているクエリをみつけたりするのに活用できるようです。
ロックを保持しているクエリの特定 – SQL Server | Microsoft Docs
遅いクエリの原因を調査するようなシナリオでは以下のようなブログ記事も参考にできそうです。
拡張イベントを用いて SQL サーバーの遅いクエリを調査 (fc2.com)
拡張イベントでスロークエリログを取得 at SE の雑記 (engineer-memo.com)
[おまけ] Azure SQL Database/Azure SQL Managed Instanceにおける拡張イベントの扱い
Azure SQL DatabaseやAzure SQL Managed Instanceでも引き続き拡張イベントは利用できるようですが、T-SQLのステートメントや、利用可能なDMVなどにいくつかの違いはあるようです。詳しくは以下参照。
拡張イベント – Azure SQL Database | Microsoft Docs
以上、拡張イベントについての簡単なまとめでした。SQL Serverのトラブルシューティング手法については絶賛勉強中ですが、他のツールや機能と比べたときのこの拡張イベントログの使いどころも気になるので、また分かったらUpdateしたいと思います。
おしまい
コメントを残す