SQL Server 拡張イベントの設定方法(初心者向け)

この記事では拡張イベント初心者が主に以下の観点で調べた内容を記載しています。
+ 拡張イベントって何？
+ 設定するための用語が良く分からない
+ どうやって設定するの？

では、書いていきます。

## 拡張イベントってなに？
> SQL Server 拡張イベントのアーキテクチャを使用すると、ユーザーは、パフォーマンスの問題のトラブルシューティングや特定に必要最小限のデータを収集できます。 拡張イベントは構成可能で、スケーリングにとても優れています。

引用元：https://docs.microsoft.com/ja-jp/sql/relational-databases/extended-events/extended-events?view=sql-server-ver15 (拡張イベントの概要)

上記について特に疑問は感じませんでした。
SQL Serverのパフォーマンスチェックをするのに、拡張イベントを利用することで
チェックするための情報を収集できるということですね。


## 実際に拡張イベントを設定してみる
ここからは拡張イベントを実際に作成していきます。
その中で初見で理解できなかった用語について記載します。

### SSMSから拡張イベントを作成する
SSMSのオブジェクトエクスプローラー上で
管理 > 拡張イベント > セッション
を選択し右クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/e1e2f345-b829-5041-5955-241e5b63a0bd.png)

すると
+ 新規セッションウィザード(Z)
+ 新規セッション
のどちらかを選択できるため、ここでは新規セッションウィザードを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/9504e586-4233-bc92-1528-80c0e26d8ee8.png)
※どちらでも作成できますが、ウィザード画面の指示に従って作成していく方が最初はわかりやすいと思いました。

以降はウィザード画面のキャプチャを見ながらわからなかった用語などを解説します。

### 説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/361e720a-935a-486a-cc91-a72cda58ff85.png)
ここは不明な用語などはありませんでした。

### セッションのプロパティの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/1e053781-c24a-2133-10a9-a5e3a076c8df.png)
特に問題ありません。

### テンプレートの選択
この画面ではキャプチャしたいイベントセッションのテンプレートを選択できます。
キャプチャしたいイベントとは、監視したいSQL Server上の出来事と言い換えることができます。
たとえば、デッドロックが発生したときにはそれを監視してログに残すなどの設定ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/97dd5265-3d01-53cf-4c99-2149bb82b128.png)

プルダウンを開くとこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/a97ada9d-5c4a-babe-77c1-aa9f5dcfab11.png)
監視したい内容ごとにテンプレートがすでに提供されており、それらを利用することで簡単にキャプチャしたいイベントを設定することが可能になっています。
 *Standard*を選択して次に進みます。

### キャプチャするイベントの選択
この画面ではキャプチャ(監視)したいイベントを選択します。
すでにテンプレートで*Standard*を選択していたため、画面右側の**選択したイベント**に
いくつかのイベントが設定されています。
他のイベントを選択したい場合や、逆に選択を外したいイベントがある場合には
それぞれを選択し矢印キーをクリックすればイベントが移動してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/eac7fe0d-3114-58c1-1355-962117aa68aa.png)

### グローバルフィールドのキャプチャ
キャプチャしたイベントから、どのような情報を得たいかを設定することができます。
例えばsql_textにチェックを入れておけば、イベントがキャプチャされたときに実行されていた
クエリを収集することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/f2360016-ad7f-d81b-a28a-a9e25ec72c24.png)

### セッションイベントフィルターの設定
こちらではイベントをキャプチャするときの条件を設定することが可能です。
例えば、下の画像ではSQL Serverのインスタンス名を条件にしています。
値カラムに任意の文字列を入れることでSQL Serverインスタンス名が指定の値と等価である場合に
設定したイベントをキャプチャすることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/fa172ad6-1de0-96df-f9be-9f6a3f4bf19d.png)

### セッションストレージの指定
ここではセッションによって収集したデータをどのように保存するかを設定することができます。
**後で分析を行うために～**となっている方では、収集したデータを指定のパス上に
データファイルとして保存させることが可能になっています。
ファイルロールオーバーとは、ログファイルが指定の最大サイズに達したときに
新しくログファイルを生成させることを言います。
デフォルトの最大数は5となっています。

**最新のデータのみ使用する**の方ですが、
こちらはバッファーメモリ上にログを保持する形となっています。
>バッファーがいっぱいになったときは指定された数のイベント(種類ごと)を保持する

に関しては良く分かっていません。
わかり次第修正しようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/58b20f7c-4f5f-3279-4d52-3c9b85620871.png)

### 概要
この画面では各画面で設定した内容の全体を確認することができます。
確認し、修正したい場合には画面左側の各行をクリックすれば該当のページを表示してくれるので、
再度設定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/593a6dad-70d2-ede4-a3ce-4867d411f47a.png)

### 完了ボタンクリック後
完了ボタンをクリックすると、作成した内容に問題がなければこのような画面が表示されます。
>セッションの作成後すぐにイベントセッションを開始する

にチェックを入れてこの画面を閉じると、作成したセッション内容でイベントの監視を始めてくれます。

>ライブデータのキャプチャ時に画面でライブデータを監視する

はSSMS上にセッションの実行状況が画面に表示され、キャプチャ対象となったイベントが発生した場合は
画面上の表示も更新されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/1ebccc2b-7080-b226-9865-91ed1d4ec87e.png)

## 感想
SQL Serverのパフォーマンスチューニングに興味があり、調べてみました。
今回の内容は直接パフォーマンスを向上させるものではないですが、SQL Serverがどんな時に
パフォーマンスが低下しているか調査するときに使うことになるかもしれないなと思います。
記載の内容に間違いなどがあればご指摘いただけると嬉しいです。