適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric SQL Database
SQL Server クエリ ストアの動作は、フライト データ レコーダーとよく似ており、クエリやプランに関連するコンパイルおよびランタイムの情報を常に収集します。 クエリ関連のデータは内部テーブルに保存され、一連のビューでユーザーに表示されます。
Views
次の図は、クエリ ストアのビューとその論理関係を示しています。コンパイル時間の情報は青のエンティティで表しています。
説明を表示する
クエリ ストアのビューについて詳しくは、「クエリのストアを使用した、パフォーマンスの監視」の「関連するビュー、関数、プロシージャ」セクションを参照してください。
クエリ処理
クエリ ストアでは、次の主なポイントでクエリ処理パイプラインとやり取りします。
クエリを初めてコンパイルすると、クエリ テキストと初期プランがクエリ ストアに送信されます。
クエリを再コンパイルすると、プランがクエリ ストアで更新されます。 新しいプランが作成されると、クエリ ストアでクエリの新しいプラン エントリが追加され、前のものはその実行統計とともに保持されます。
クエリを実行すると、ランタイム統計がクエリ ストアに送信されます。 クエリ ストアは、現在アクティブになっている間隔内で実行されたすべてのプランに対して正確な集計統計を保持します。
コンパイルおよび再コンパイルの確認フェーズ時に、SQL Server では、現在実行中のクエリに対して適用する必要があるプランがクエリ ストアにあるかどうかを判断します。 強制プランがあり、プロシージャ キャッシュのプランが強制プランと異なる場合は、クエリが再コンパイルされます。 これは、実質的にはプラン ヒントがそのクエリに適用された場合と同じ方法です。 この処理は、ユーザーのアプリケーションに透過的に行われます。
次の図は、前の手順で説明した統合のポイントを示しています。
Remarks
I/O のオーバーヘッドを最小限に抑えるため、新しいデータはメモリ内にキャプチャされます。 書き込み操作はキューに登録され、その後、ディスクにフラッシュされます。 下図でプラン ストアとして示されている、クエリおよびプランの情報は、最小限の待機時間でフラッシュされます。 ランタイム統計情報として示されるランタイム統計は、DATA_FLUSH_INTERVAL_SECONDS ステートメントの SET QUERY_STORE オプションで定義された一定期間、メモリ内に保持されます。 Management Studio クエリ ストア ダイアログ ボックスを使用して、 [データ フラッシュ間隔 (分)] の値を入力できます。これは、内部的に秒に変換されます。
システムがクラッシュした場合、またはトレース フラグ 7745 を使用しているときにシャットダウンが発生した場合、クエリ ストアでは、DATA_FLUSH_INTERVAL_SECONDS で定義された時間枠まで、収集されたもののまだ保存されていないランタイム データが失われる可能性があります。 クエリ キャプチャのパフォーマンスとデータの可用性のバランスを取るために、既定値の 900 秒 (15 分) を使用することをお勧めします。
Important
[最大サイズ (MB)] の制限は、厳密には適用されません。 ストレージ サイズは、クエリ ストアでディスクにデータが書き込まれる場合にのみ確認されます。 この間隔は、[データのフラッシュ間隔] の値によって設定されます。 クエリ ストアでストレージ サイズの確認の合間に最大サイズの制限を超えた場合は、読み取り専用モードに移行します。 [サイズ ベースのクリーン アップモード] が有効になっている場合は、最大サイズの制限を適用するクリーンアップ メカニズムもトリガーされます。
Note
メモリ不足が発生した場合、DATA_FLUSH_INTERVAL_SECONDS で定義されている時間より前に、ランタイム統計がディスクにフラッシュされる可能性があります。
クエリ ストア データの読み取り中は、メモリ内のデータとディスク上のデータが透過的に統合されます。
セッションが終了された場合、またはクライアント アプリケーションが再起動またはクラッシュした場合、クエリ統計は記録されません。
こちらも参照ください
クエリ ストアを使用したパフォーマンスの監視
クエリ ストアを使用する際のベスト プラクティス
クエリ ストアのカタログ ビュー (Transact-SQL)