【3分で流し読み】SQL Serverの拡張イベントログを理解する

こんばんは。今日は、SQL Serverの拡張イベントログについてちょっと調べてみたので、分かったことをまとめておきたいと思います。

ネットを探してもあまり記事をみつけられなかったので、同じ情報を探している方の参考になりましたら幸いです。

(SQL Server、覚えること多すぎ・・・笑)

拡張イベントログとは

XEvents の概要 – SQL Server、Azure SQL Database、およびAzure SQL Managed Instance – SQL Server | Microsoft Docs

  • ユーザーが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 Profiler から Extended Events (拡張イベント)へ – SQL Server&T-SQLに関するコラム – SQL Server 入門 (sql55.com)

実際の拡張イベントログをみてみる

クイック スタート: 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したいと思います。

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。