はじめに
Query Storeは、データベースのパフォーマンス分析と最適化を行う上で非常に強力なツールです。本記事では、Query Storeを効果的に活用してデータベースのパフォーマンスを向上させる方法を詳しく解説します。
Top Resource Consuming Queriesの特定
使用可能なメトリクス
Query Storeは以下のようなメトリクスでクエリをランク付けします。
- 実行時間(Duration)
- CPU時間
- 論理読み取り回数
- 物理読み取り回数
- メモリ消費量
- 実行回数
SQL Server Management Studio (SSMS) での分析
- データベースを展開し、「Query Store」を右クリック
- 「Top Resource Consuming Queries」を選択
- 分析したいメトリクスと期間を選択
T-SQLを使用した分析
以下のクエリを使用して、プログラム的にTop Resource Consuming Queriesを抽出できます。
sql
SELECT TOP 10
q.query_id,
qt.query_text_id,
qt.query_sql_text,
SUM(rs.count_executions) AS total_executions,
SUM(rs.avg_duration * rs.count_executions) AS total_duration,
SUM(rs.avg_cpu_time * rs.count_executions) AS total_cpu_time,
SUM(rs.avg_logical_io_reads * rs.count_executions) AS total_logical_io_reads
FROM sys.query_store_query q
JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
GROUP BY q.query_id, qt.query_text_id, qt.query_sql_text
ORDER BY total_duration DESC;
分析のベストプラクティス
- 複数のメトリクスを考慮する
- 適切な時間範囲を設定する
- 実行回数を考慮する
- コンテキスト(時間帯、データ量、ビジネス重要度)を考慮する
クエリプランの変更検出
プラン変更の検出方法
- SSMSのQuery Store画面:「Regressed Queries」レポートを使用
- T-SQLクエリを使用
実際に使用できるT-SQLの例です。
sql
SELECT
q.query_id,
qt.query_sql_text,
p.plan_id,
p.last_execution_time,
rs.avg_duration,
rs.avg_cpu_time,
rs.avg_logical_io_reads
FROM sys.query_store_query q
JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
WHERE q.query_id IN (
SELECT query_id
FROM sys.query_store_plan
GROUP BY query_id
HAVING COUNT(DISTINCT plan_id) > 1
)
ORDER BY q.query_id, p.last_execution_time DESC;
プラン変更の分析
- 変更前後のプランを比較し、主要な違いを特定
- 統計情報の更新、インデックスの変更、パラメータスニッフィングなど、プラン変更の原因を調査
- パフォーマンスへの影響を定量的に評価
強制プラン機能の活用
強制プランの概念
強制プラン(Plan Forcing)は、特定のクエリに対して選択した実行プランを強制的に使用させる機能です。
強制プランの適用
SSMSを使用する方法
- Query Storeビューアーで対象のクエリを選択
- パフォーマンスが良好なプランを右クリック
- 「プランの強制を適用」を選択
T-SQLを使用する方法
sql
EXEC sp_query_store_force_plan @query_id = クエリID, @plan_id = プランID;
強制プランの管理
- 定期的な評価:強制プランのパフォーマンスを定期的に評価
- A/Bテスト:新しいプランと強制プランのパフォーマンスを比較
- ドキュメント化:強制プランを適用した理由、日時、対象クエリの詳細を記録
- アラートの設定:強制プランのパフォーマンスが閾値を下回った場合にアラートを発生
パフォーマンス最適化のワークフロー
- Top Resource Consuming Queriesを特定
- 問題のあるクエリのプラン履歴を分析
- パフォーマンスの良いプランと悪いプランを比較
- 必要に応じて強制プランを適用
- インデックス、統計情報、クエリ自体の最適化を検討
- 変更後のパフォーマンスを継続的に監視
まとめ
Query Storeを活用したパフォーマンス分析と最適化は、データベース管理者と開発者にとって非常に強力なアプローチです。Top Resource Consuming Queriesの特定、クエリプラン変更の検出、強制プラン機能の活用を組み合わせることで、データベースのパフォーマンスを継続的に向上させることができます。定期的な分析と最適化のサイクルを確立し、Query Storeの機能を最大限に活用することが重要です。