検索
連載

クエリプロセッサのバックグラウンドジョブの実行統計を確認するSQL Server動的管理ビューレファレンス(40)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、クエリプロセッサのバックグラウンドジョブにおける実行統計の確認について解説します。

Share
Tweet
LINE
Hatena

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_background_job_queue_stats」の、クエリプロセッサのバックグラウンドジョブにおける実行統計の確認について解説します。対応バージョンは、SQL Server 2008以降です。

概要

 「sys.dm_exec_background_job_queue_stats」動的管理ビューでは、クエリプロセッサのバックグラウンドジョブの実行統計を出力できます。「SQL Server 2019 CTP2」では、クエリプロセッサのバックグランドジョブには、統計情報の非同期更新処理のみが該当します。そのため、この動的管理ビューを使用することで、統計情報の非同期更新の実行統計を出力できます。

出力内容

 1行のみ出力されます。

列名 データ型 説明
queue_max_len int キューの最大長
enqueued_count int キューに正常に送信された要求の数
started_count int 実行を開始した要求の数
ended_count int 成功または失敗のどちらかに処理された要求の数
failed_lock_count int ロックの競合またはデッドロックのために失敗した要求の数
failed_other_count int その他の理由で失敗した要求の数
failed_giveup_count int 再試行の制限に達したために失敗した要求の数
enqueue_failed_full_count int キューがいっぱいのため、エンキューの試行に失敗した数
enqueue_failed_duplicate_count int 重複したエンキューの試行の数
elapsed_avg_ms int 要求の平均経過時間(ミリ秒単位)
elapsed_max_ms int 要求の最長経過時間(ミリ秒単位)

動作例

 データベースで統計の非同期更新を有効化していない状態で、「sys.dm_exec_background_job_queue_stats」動的管理ビューを出力してみます(図1)。

図1
図1 非同期更新が有効化されていない場合には全ての列が「0」となる

 特に何もバックグラウンドジョブが実行されていない状態でも1行出力されますが、全ての列が「0」と出力されました。次に、データベースで統計情報の非同期更新を有効化します(図2)。

図2
図2 「T-SQL」でデータベースの統計情報の非同期更新を有効化したところ

 統計情報の非同期更新を有効化したデータベースのテーブルで、統計情報が更新されるようにデータの変更を大量に行います。統計情報を更新させるための「SELECT」クエリを実行した後、統計情報が更新されたことを確認します(図3)。

図3
図3 統計情報の更新日時から、統計情報が更新されたことが分かる

 統計情報の非同期更新が行われたため、「sys.dm_exec_background_job_queue_stats」動的管理ビューを確認すると、統計情報の非同期更新の実行回数や、平均経過時間が確認できます(図4)。

図4
図4 統計情報の非同期更新が1回行われ、259ミリ秒要したことが分かる

 「started_count」列の値から統計情報の非同期更新が行われた回数や、「elapsed_avg_ms」列の値から更新に要した平均時間を確認できます。

 他のデータベースのテーブルでも統計情報の非同期更新を実行させて(図5)、「sys.dm_exec_background_job_queue_stats」動的管理ビューを出力します(図6)。

図5
図5 他のデータベースのテーブルで統計情報を更新させたところ
図6
図6 他のデータベースのテーブルの統計情報を更新した情報が合算された

 出力行が増えるようなことはなく、1行のみが出力されました。全てのバックグラウンドジョブを合わせた実行統計のため、統計ごとの情報は確認できませんでした。また、SQL Serverサービスの再起動により、情報は「0」にリセットされるようです。

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

筆者紹介

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

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

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

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


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る