SQL Server の Query Store は、データベース管理者やデベロッパーにとって強力なパフォーマンス監視およびチューニングツールです。本ガイドでは、Query Store の設定方法、重要なパラメータ、最適化のベストプラクティスについて詳しく解説します。
Query Storeの有効化方法
Query Store を使用するには、まず対象のデータベースで有効化する必要があります。以下に3つの主要な有効化方法を説明します。
T-SQLを使用した有効化
T-SQL を使用して Query Store を有効化するには、以下のコマンドを実行します。
ALTER DATABASE [YourDatabaseName]
SET QUERY_STORE = ON;
このコマンドにより、デフォルト設定で Query Store が有効化されます。必要に応じて、後述するパラメータを調整することができます。
SQL Server Management Studio (SSMS) を使用した有効化
SSMS を使用して Query Store を有効化する手順は以下の通りです。
- データベースを右クリック
- プロパティを選択
- クエリストアを選択
- 操作モード(読み取り/書き込み)を選択
SSMS を使用すると、GUIを通じて簡単に設定を行うことができます。特に、複数のパラメータを同時に設定する場合に便利です。
新しいデータベースでの自動有効化
SQL Server 2016 以降では、新しく作成されるデータベースで Query Store を自動的に有効化するオプションがあります。これは、モデルデータベースで Query Store を有効化することで実現できます。
ALTER DATABASE [model]
SET QUERY_STORE = ON;
このように設定することで、以降に作成される全てのデータベースで Query Store が自動的に有効化されます。ただし、この設定は慎重に行う必要があります。全てのデータベースで Query Store が必要とは限らないため、システムの要件に応じて判断してください。
重要な設定パラメータとその意味
Query Store の動作を最適化するために、いくつかの重要なパラメータがあります。これらのパラメータを適切に設定することで、パフォーマンスと保存データのバランスを取ることができます。
MAX_STORAGE_SIZE_MB
このパラメータは、Query Store が使用できるディスク容量の上限を設定します。大きな値を設定すると、より多くのクエリ情報を保存できますが、ディスク使用量が増加します。小さすぎる値を設定すると、古いデータが早く削除される可能性があるため、長期的な分析が困難になる場合があります。
- 意味: Query Storeが使用できる最大ストレージサイズ(MB)
- 推奨: ワークロードの規模に応じて調整(大規模なデータベースでは1GB以上)
INTERVAL_LENGTH_MINUTES
このパラメータは、Query Store がクエリの実行統計を集計する頻度を決定します。短い間隔を設定すると、より細かい粒度のデータが得られますが、保存されるデータ量が増加します。長い間隔を設定すると、データ量は減少しますが、詳細な分析が困難になる可能性があります。
- 意味: 統計情報を集計する時間間隔
- 推奨: 15分から60分の間で調整
STALE_QUERY_THRESHOLD_DAYS
このパラメータは、Query Store が個々のクエリの情報を保持する期間を決定します。長期間の設定は、パフォーマンスの長期的な傾向を分析する際に役立ちますが、ストレージの使用量が増加します。短期間の設定は、ストレージ使用量を抑えますが、過去のデータへのアクセスが制限されます。
- 意味: クエリ情報を保持する日数
- 推奨: 長期的なトレンド分析が必要な場合は増やす
SIZE_BASED_CLEANUP_MODE
このパラメータは、Query Store が個々のクエリの情報を保持する期間を決定します。長期間の設定は、パフォーマンスの長期的な傾向を分析する際に役立ちますが、ストレージの使用量が増加します。短期間の設定は、ストレージ使用量を抑えますが、過去のデータへのアクセスが制限されます。
- 意味: 最大サイズに達した際のクリーンアップモード
- オプション: AUTO(自動), OFF(オフ)
QUERY_CAPTURE_MODE
このパラメータは、Query Store が最大サイズ(MAX_STORAGE_SIZE_MB)に達したときの動作を制御します。AUTO に設定すると、古いデータが自動的に削除されます。OFF に設定すると、最大サイズに達した時点で新しいデータの収集が停止します。
- 意味: キャプチャするクエリの種類を制御
- オプション: ALL(すべて), AUTO(自動), NONE(なし)
MAX_PLANS_PER_QUERY
このパラメータは、個々のクエリに対して保存される実行プランの最大数を制限します。高い値を設定すると、より多くのプラン変更を追跡できますが、ストレージ使用量が増加します。低い値を設定すると、ストレージ使用量は抑えられますが、一部のプラン変更が記録されない可能性があります。
- 意味: 1つのクエリに対して保存する最大プラン数
- デフォルト値: 200
設定の最適化
Query Store の設定を最適化することで、システムのパフォーマンスを向上させ、有用な情報を効率的に収集することができます。以下に、最適化のためのいくつかの重要なポイントを説明します。
ALTER DATABASE [YourDatabaseName]
SET QUERY_STORE (
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 15,
STALE_QUERY_THRESHOLD_DAYS = 60,
SIZE_BASED_CLEANUP_MODE = AUTO,
QUERY_CAPTURE_MODE = AUTO,
MAX_PLANS_PER_QUERY = 100
);
ベストプラクティス
Query Store を効果的に活用するためのベストプラクティスを以下にまとめます
- 適切な初期設定
- 定期的なパフォーマンスレビュー
- フォースプランの慎重な使用
- 定期的なメンテナンス
- 監視とアラートの設定
適切な初期設定
新しい環境で Query Store を有効化する際は、以下の設定を考慮してください。
ALTER DATABASE [YourDatabaseName]
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30),
DATA_FLUSH_INTERVAL_SECONDS = 3000,
INTERVAL_LENGTH_MINUTES = 15,
MAX_STORAGE_SIZE_MB = 1000,
QUERY_CAPTURE_MODE = AUTO,
SIZE_BASED_CLEANUP_MODE = AUTO
);
定期的なパフォーマンスレビュー
Query Store のデータを活用して、定期的にデータベースのパフォーマンスをレビューしましょう。以下のようなポイントに注目します。
- 実行時間の長いクエリ
- リソース使用量の多いクエリ
- 実行プランが頻繁に変更されるクエリ
- パフォーマンスが経時的に低下しているクエリ
これらの情報を基に、インデックスの追加や統計の更新、クエリの最適化などの対策を講じることができます。
フォースプランの慎重な使用
Query Store の機能の一つに、特定の実行プランを強制的に使用する「プランの強制」があります。この機能は非常に強力ですが、慎重に使用する必要があります。
sqlCopyEXEC sp_query_store_force_plan @query_id = <query_id>, @plan_id = <plan_id>;
プランを強制する前に、以下の点を確認してください。
- 強制するプランが本当に最適であるか
- データ分布の変化によってプランが非効率になる可能性はないか
- 定期的にプランの妥当性を再評価する仕組みがあるか
定期的なメンテナンス
Query Store のパフォーマンスを維持するために、定期的なメンテナンスを行いましょう。以下のタスクを検討してください。
- 不要なデータの削除
- 統計情報の更新
- インデックスの再構築や再編成
以下のクエリを使用して、Query Store のデータをクリーンアップできます。
sqlCopyALTER DATABASE [YourDatabaseName] SET QUERY_STORE CLEAR;
ただし、このコマンドは全てのデータを削除するため、必要なデータのバックアップを取ってから実行してください。
監視とアラートの設定
Query Store の状態を継続的に監視し、問題が発生した場合にすぐに対応できるようにしましょう。以下のようなアラートを設定することをお勧めします。
- Query Store のストレージ使用量が上限に近づいた場合
- Query Store が自動的に読み取り専用モードに切り替わった場合
- 特定のクエリのパフォーマンスが著しく低下した場合
これらのアラートを設定することで、問題が大きくなる前に対処することができます。
まとめ
Query Store は SQL Server のパフォーマンス監視と最適化において非常に強力なツールです。適切に設定し、効果的に活用することで、以下のような利点が得られます。
- クエリパフォーマンスの詳細な分析
- パフォーマンス問題の迅速な特定と解決
- 長期的なパフォーマンストレンドの把握
- プラン変更による影響の評価
ただし、Query Store の効果を最大限に引き出すためには、環境に応じた適切な設定、定期的なメンテナンス、そして収集されたデータの慎重な分析が不可欠です。本ガイドで紹介した設定方法、最適化のポイント、ベストプラクティスを参考に、Query Store を活用してデータベースのパフォーマンスを向上させてください。
Query Store の使用は単なるツールの導入にとどまらず、継続的なパフォーマンス管理プロセスの一部として捉えることが重要です。定期的なレビュー、設定の調整、そして新しい機能やベストプラクティスの学習を通じて、Query Store の価値を最大化し、データベース環境の健全性と効率性を維持していきましょう。