goo blog サービス終了のお知らせ 

odaaaiheu

写真付きで日記や趣味を書くならgooブログ

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

2014-10-27 14:16:29 | 日記





拡張イベントの新しいユーザー インターフェース

 SQL Server 2012 の SQL Server Management Studio では、オブジェクト エクスプローラーの[管理]フォルダを展開すると、[拡張イベント]フォルダがあります。拡張イベントの管理はここから行います。[拡張イベント]フォルダを展開すると、[セッション]フォルダがあり、展開すると SQL Server に登録されている拡張イベントのセッションが確認できます。

 

 登録されているセッションには前回ご紹介しました system_health セッションが確認できると思います。また、AlwaysOn 可用性グループのセッションも既定で提供される予定です。このセッションについては後程ご紹介します。[セッション]フォルダから次のような拡張イベントの操作が行えます。

  セッションの新規作成/変更/削除/   セッションの開始/停止   セッションが採取しているデータの参照   セッションの定義のエクスポート

 拡張イベントの作成には新規セッション ウィザードかダイアログを使用します。[セッション]フォルダを右クリックして、[新規セッション ウィザード]を選択すると新規セッション ウィザードが開始され、同様に右クリックして[新規セッション]を選択すると新規セッションのダイアログが表示されます。

 新規セッション ウィザードではウィザードに従って必要な項目を入力することで簡易的にセッションを作成することができます。新規セッションウィザードの画面は次のようになります。

 [セッションのプロパティの設定]  セッション名を入力します。[サーバーの起動時にイベント セッションを開始する]をチェックすると、system_health セッションと同様に SQL Server が起動した時に自動でセッションを開始することができます。

 [テンプレートの選択]画面  SQL Server プロファイラと同様に提供されているテンプレートの中から選択をすることができます。新規セッションのダイアログでは提供されたテンプレート以外にテンプレート ファイルを選択することができます。テンプレート ファイルは SQL Server に登録されたセッションを右クリックし、[セッションのエクスポート]を選択して作成できます。

 [キャプチャするイベントの選択]画面  イベントの一覧でイベントをポイントすると、一覧の下にイベントの説明とイベント データである列情報が表示されますので、前回の sys.dm_xe_object_columns を参照していた手間に比べると非常に簡単になっています。

 ダイアログのイベント タブの画面もウィザードと同じ画面構成ですが、ダイアログでは画面右上の[構成]ボタンを押下すると、画面が切り替わりイベントごとにアクション(グローバル フィールド)やフィルタを設定することができます。

 [グローバル フィールドのキャプチャ]  アクションを選択します。[キャプチャするイベントの選択]画面で選択した全てのイベントに適用されます。

 [セッション イベント フィルタの設定] 画面  フィルタの設定を行います。フィルタは[キャプチャするイベントの選択]画面で選択した全てのイベントに適用されます。

 [セッション データ ストレージの指定]  ターゲット event_file か ring_buffer の設定を行います。両方のターゲットを設定することも可能です。event_file と ring_buffer 以外のターゲットを使用したい場合は新規セッションのダイアログを使用します。

 新規セッション ウィザードでは上述しましたように制限があります。より詳細な設定を行ってセッションを作成する場合は、新規セッションのダイアログを使用してください。

SQL Server Management Studioでイベント データの参照も

 セッションの管理だけでなく SQL Server Mangement Studio を使用してキャプチャしたイベント データを参照することができます。イベント データの参照は、キャプチャしているデータをリアル タイムに監視するライブ データ監視の機能と、ターゲットに出力されたデータを確認する機能の 2 つが提供されます。

 ライブ データの監視はセッションが開始されているときに使用できる機能です。ライブ データの監視ではキャプチャされたイベントの一覧とイベントの詳細が表示されます。一覧には既定でイベント名と発生時刻が表示されています。また、一覧にキャプチャしているイベントの列を任意に追加できます。

 詳細ペインでは個別のイベント データが表示されますが、列値にマップされるテキストも自動で表示されます。

 詳細ペインで表示しきれていない項目はダブルクリックをすると、別ウィンドウが開いて全てを確認することができます。

 ライブデータの監視を停止した後は任意の列でグループ化や合計、平均などの集計も行うことが可能です。

 ターゲットに出力されたデータを確認するには、オブジェクト エクスプローラーのセッションを展開し、ターゲットを選択して右クリックのメニューの[ターゲット データの表示]を選択するか、メニューの[ファイル]-[開く]からファイルを選択します。表示はライブ データ監視と同様ですので、グループ化や集計を行うことも可能です。

SQL トレースから拡張イベントへの移行

 拡張イベントのイベントなどのオブジェクトは SQL Server 2012 で大幅に増えました。これにより SQL トレースの殆どのイベントをカバーしており、今後はデータベース エンジンでは SQL トレースの代わりに拡張イベントの使用が推奨されます。また、SQL トレースの Security Audito イベント カテゴリについては SQL Server 監査を使用することになります。

 SQL Server 2012 では SQL トレースから拡張イベントに移行を容易にするため、SQL トレースと拡張イベントの対応を確認できる 2 つのビューが提供されます。

sys.trace_xe_event_map

拡張イベントのイベントと SQL トレースのイベントの対応表。

1つの行が1つの SQL トレースのイベント ID と拡張イベントのイベント名の対応を表します。

 sys.trace_xe_action_map

拡張イベントのアクションと SQL トレースの列の対応表。

1つの行が1つの SQL トレースの列 ID と拡張イベントのアクション名の対応を表します。

 既に SQL トレースを使用されている場合は、これらのビューを使用して等価な拡張イベントを作成できますので、次のサイトを確認してみてください。ただ残念ですが、この変換は自動で行うことはできず、手動で行っていただく必要があります。

 既存の SQL トレース スクリプトから拡張イベント セッションへの変換

新たな既定のセッション

 SQL Server 2008 から提供されている system_health セッションですが、SQL Server 2012 ではもう1つのセッションが既定で提供されています。AlwaysOn_health セッションがそのセッションとなります。AlwaysOn_health はそのセッション名から想像がつくかと思いますが、AlwaysOn 可用性グループのイベントをキャプチャします。このセッションで次のような可用性グループのイベントをキャプチャしています。

 AlwaysOn DDL の実行 リースの期限切れ レプリカ マネージャの状態の変更 レプリカの状態の変更 レプリカの役割の変更 REDO スレッドがロックの獲得待ちが発生した場合 エンド ポイントの関連 AlwaysOn 接続タイムアウト リスナーの開始/停止 Windows Server フェールオーバー クラスタの問題 可用性グループ リソースの失敗 自動ページ修復 データベースのサスペンド/レジューム

 AlwaysOn_health は既定で実行されていません。[新しい可用性グループ ウィザード]で可用性グループを構成すると自動で開始されるようになります。

 AlwaysOn_health セッションのターゲットは event_file です。system_health セッションと同じログ フォルダに AlwaysOn_health_-.xel のファイル名でイベント データが保存されます。

 また、<インスタンス ディレクトリ>\MSSQL\Install\u_tables.sql に DDL が含まれています。

 ここまで紹介してきた機能の他にも .NET Framework のライブラリが提供されユーザー アプリケーションからイベント データを参照が可能になっています。また、PowerShell で操作が可能になるなど、ユーザビリティは向上しています。使いやすくなった拡張イベントをトラブルシューティングのツールの 1 つとしてご利用いただければと思います。

坂輪貴行 [著]




コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。