SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

あたらしいSQL Server/Denaliの世界

トレースはもはや古い?SQL Server 2012 の拡張イベント(前編)

#011


既定で提供される System_health セッション

 冒頭でお話しした既定のセッションのセッション名は system_health と呼ばれています。SQL Server が起動すると自動で開始されていますので、実行中のセッションを sys.dm_xe_sessions で確認すると、system_health が確認できると思います。

 system_health のセッションのターゲットに SQL Server 2008 R2 まではリング バッファーのみでした。さきほどご紹介したようにリング バッファーはメモリを使用しているため、SQL Server のサービスを停止やフェールオーバー クラスタを使用している環境でフェールオーバーが発生した場合、それまで出力されていたイベント データはなくなってしまいます。SQL Server 2012 では event_file ターゲットにも出力しています。ファイルは ログ フォルダに system_health_*.xel のファイル名で出力されています。

  system_health セッションは次のような SQL Server の重大なエラーやパフォーマンスに影響するイベントをキャプチャしています。

  •  データベース エンジン エラーの重要度が 20 以上。
  •   メモリ関連のエラー(17803,701,802,8645,8651,8657,8902)
  •   スケジューラが応答を停止した場合
  •   デッドロック情報
  •   ロックの 30 秒以上の待機
  •   ラッチとその他のリソースの 15 秒以上の待機
  •   ログイン処理の 5 秒以上の待機
  •   プリエンプティブ モードでの実行で 45 秒以上の待機
  •   CLR のメモリ アロケーション エラー
  •   以下の場合にリング バッファ(sys.dm_os_ring_buffer)にレコードを記録した場合
  •   メモリ関連
  •   スケジューラ関連
  •   セキュリティ関連
  •   接続関連
  •  フェールオーバー クラスタまたは AlwaysOn Availabilty Groups の詳細な正常性チェックのシステムに関するチェックの結果

 この中のロックやラッチとその他の待機は sqlols.wait_infoイベントをキャプチャしています。sqlos.wait_info イベントの列を sys.dm_xe_objcct_columns を使用して確認すると wait_type 列があります。

 イベント データの wait_type の値は数値ですが、1 から 21 までがロックの種類を表しています。1 から 21 の値がどのロックの種類になるかは sys.dm_xe_map_values を確認します。sys.dm_xe_object_columns の type_name が ‘wait_types’ となっていますので、次のクエリを実行します。

 このように sys.dm_xe_map_values を使用してイベント データの列値をテキストに変換することができます。また、sqlos.wait_info イベントは待機が開始した時と終了したときの 2 回のイベント データが出力されます。イベント データの opcode 列の値が 0 の場合は待機の開始時に出力されたものであり、待機時間の Duration 列は 0 となります。opcode が 1 のものは待機の終了時に出力されたものであり、Duration 列は待機していた時間 (msec) が出力されます。

 また、system_health セッションを作成する DDL が <インスタンス ディレクトリ>\MSSQL\Install\u_tables.sql に含まれています。この定義を確認すると system_health でキャプチャしている待機のイベントでは、ロックやラッチなど待機の種類によって待機時間の条件が異なっています。次のセッションでは実行時間が 30 秒以上要したクエリの sqlserver.sql_statement_completed イベントをキャプチャしています。このようにイベントのキャプチャ時には WHERE 句を記述してフィルタを行うことが可能です。

  ここまで Transact-SQL を使用した方法で拡張イベントの作成や作成に必要な情報の確認方法などをご紹介してきました。SQL Server 2008 R2 までは GUI もなく、今回ご紹介してきた方法でしか拡張イベントを使用する方法がありません。SQL Server 2012 ではSQL Server Management Studio 上で拡張イベントの管理が行えるようになりました。その機能についてのご紹介は次回までお待ちください。

 最後に今回使用した動的管理ビューを含め拡張イベントに関連するビューをまとめておきます。

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
あたらしいSQL Server/Denaliの世界連載記事一覧

もっと読む

この記事の著者

坂輪貴行(サカワ タカユキ)

  日本マイクロソフトの Premier Field Engineering 部にて、SQL Server ユーザーの支援を行う。前職はシステム エンジニアであり、長く Sybase を使用したプロジェクトに従事。業界歴 14 年の月一ゴルファー。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3629 2012/02/10 18:21

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング