キャッシュされたトリガーの実行統計を出力するSQL Server動的管理ビューレファレンス(76)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、キャッシュされたトリガーの実行統計の出力について解説します。

» 2022年01月17日 05時00分 公開
[伊東敏章@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_trigger_stats」における、キャッシュされたトリガーの実行統計の出力について解説します。対応バージョンは、SQL Server(サポートされている全てのバージョン)です。

概要

 SQL Serverでトリガーを実行する際には、トリガー処理の実行前に、トリガーの定義や統計情報を使用してコンパイル処理が実行されます。コンパイル結果は「実行プラン」としてプランキャッシュに保存され、次回以降の実行では、コンパイル前に実行プランがプランキャッシュに保存されていないかどうかが確認されます。実行プランが保存されている場合には、コンパイル処理をスキップすることで効率的にクエリが実行されます。

 実行プランには、ツリー構造で表されるトリガーの実行計画以外にも、キャッシュされた時刻や実行回数、実行時間などの実行統計の情報が保存されています。

 「sys.dm_exec_trigger_stats」動的管理ビューを使用することで、プランキャッシュに保存されているトリガーの実行プランについて、実行統計の情報を出力することが可能です。

出力内容

列名 データ型 説明
database_id int トリガーのデータベースID
object_id int トリガーのオブジェクトID
type char(2) トリガーの種類
 TA=アセンブリ(CLR)トリガー
 TR=SQLトリガー
type_desc nvarchar(60) トリガーの種類の説明
 CLR_TRIGGER
 SQL_TRIGGER
sql_handle varbinary(64) トリガーのクエリハンドル
plan_handle varbinary(64) トリガーの実行プランの識別子
プランがキャッシュに残っている間だけ一定「sys.dm_exec_cached_plans」動的管理ビューで使用できる
cached_time datetime トリガーがキャッシュに追加された時刻
last_execution_time datetime トリガーが最後に実行された時刻
execution_count bigint トリガーが最後にコンパイルされてからの実行回数
total_worker_time bigint コンパイル後にこのトリガーの実行で消費されたCPU時間の合計(マイクロ秒単位)
last_worker_time bigint 最後に実行したときに使用されたCPU時間(マイクロ秒単位)
min_worker_time bigint 1回の実行で使用した最小CPU時間(マイクロ秒単位)
max_worker_time bigint 1回の実行で使用した最大CPU時間(マイクロ秒単位)
total_physical_reads bigint コンパイル後にこのトリガーの実行で行われた物理読み取りの合計数
last_physical_reads bigint 最後に実行されたときの物理読み取りの数
min_physical_reads bigint 1回の実行で行われた物理読み取りの最小数
max_physical_reads bigint 1回の実行で行われた物理読み取りの最大数
total_logical_writes bigint コンパイル後にこのトリガーの実行によって実行された論理書き込みの合計数
last_logical_writes bigint 最後に実行されたときの論理読み取りの数
ページが既にダーティーであった場合はカウントされない
min_logical_writes bigint 1回の実行で行われた論理書き込みの最小数
max_logical_writes bigint 1回の実行で行われた論理書き込みの最大数
total_logical_reads bigint コンパイル後にこのトリガーの実行によって実行された論理読み取りの合計数
last_logical_reads bigint 最後に実行されたときの論理読み取りの数
min_logical_reads bigint 1回の実行で行われた論理読み取りの最小数
max_logical_reads bigint 1回の実行で行われた論理読み取りの最大数
total_elapsed_time bigint このトリガーの実行完了までの経過時間の合計(マイクロ秒単位)
last_elapsed_time bigint このトリガーの最後の実行完了までの経過時間(マイクロ秒単位)
min_elapsed_time bigint このトリガーの実行完了までの最小経過時間(マイクロ秒単位)
max_elapsed_time bigint このトリガーの実行完了までの最大経過時間(マイクロ秒単位)
total_spills bigint コンパイル後にこのトリガーの実行によって書き込まれたページの合計数
適用対象:SQL Server 2017(14.x)CU3以降
last_spills bigint 最後に実行されたときに書き込まれたページの数
適用対象:SQL Server 2017(14.x)CU3以降
min_spills bigint 1回の実行中に書き込まれたページの最小数
適用対象:SQL Server 2017(14.x)CU3以降
max_spills bigint 1回の実行中に書き込まれたページの最大数
適用対象:SQL Server 2017(14.x)CU3以降
total_page_server_reads bigint コンパイル後にこのトリガーの実行によって実行されたページサーバの読み取りの合計数
適用対象:Azure SQL Databaseハイパースケール
last_page_server_reads bigint 最後にトリガーを実行したときのページサーバの読み取り回数
適用対象:Azure SQL Databaseハイパースケール
min_page_server_reads bigint 1回の実行で行われたページサーバの読み取りの最小数
適用対象:Azure SQL Databaseハイパースケール
max_page_server_reads bigint 1回の実行で行われたページサーバの読み取りの最大数
適用対象:Azure SQL Databaseハイパースケール

動作例

 トリガーを作成、実行して「sys.dm_exec_trigger_stats」動的管理ビューを出力します(図1)。

図1 図1 「sys.dm_exec_trigger_stats」動的管理ビューの実行結果

 プランキャッシュに記録されている全トリガーの実行プランの実行統計が出力されました。実行結果からは、実行の時間や回数、CPU時間などのパフォーマンスに関する情報を取得できました。

 「sys.dm_exec_trigger_stats」動的管理ビューはプランキャッシュに記録された全てのトリガーの実行統計を出力します。そのため、特定のトリガーの実行統計を確認するには、「object_id」列や「database_id」列などを使用して結果を絞り込みます(図2)。

図2 図2 トリガー名で結果を絞り込んだところ

 絞り込み条件や出力順を変更することで、実行時間の長いトリガーやCPU負荷の高いトリガーを抽出できます(図3)。

図3 図3 1回の実行当たりのCPU使用時間が長い順に結果を並べ替えたところ

※本Tipsは、「Windows Server 2019」上に「SQL Server 2019」をインストールした環境を想定して解説しています。

筆者紹介

椎名 武史(しいな たけし)

日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。

伊東 敏章(いとう としあき)

日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。