クエリ ストアでデータを収集する方法How Query Store collects data

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics

SQL Server クエリ ストアの動作は、フライト データ レコーダーとよく似ており、クエリやプランに関連するコンパイルおよびランタイムの情報を常に収集します。SQL Server Query Store works much like a flight data recorder, constantly collecting compile and runtime information related to queries and plans. クエリ関連のデータは内部テーブルに保存され、一連のビューでユーザーに表示されます。Query-related data is persisted in the internal tables and presented to users through a set of views.


次の図は、クエリ ストアのビューとその論理関係を示しています。コンパイル時間の情報は青のエンティティで表しています。The following diagram shows Query Store views and their logical relationships, with compile time information presented as blue entities:

クエリ ストア プロセス ビューQuery Store process views
ビューの説明View descriptions

表示View 説明Description
sys.query_store_query_textsys.query_store_query_text データベースに対して実行された一意のクエリ テキストを表示します。Presents unique query texts executed against the database. クエリ テキストの前後のコメントとスペースは無視されます。Comments and spaces before and after the query text are ignored. テキスト内のコメントとスペースは無視されません。Comments and spaces inside text aren't ignored. バッチ内のすべてのステートメントが、個別のクエリ テキスト エントリを生成します。Every statement in the batch generates a separate query text entry.
sys.query_context_settingssys.query_context_settings クエリが実行されるプランに影響する設定の一意の組み合わせを示します。Presents unique combinations of plan-affecting settings under which queries are executed. 同じクエリ テキストが、プランに影響する異なる設定で実行されると、context_settings_id はクエリキーの一部であるため、クエリ ストアに個別のクエリ エントリが生成されます。The same query text executed with different plan-affecting settings produces a separate query entry in Query Store because context_settings_id is part of the query key.
sys.query_store_querysys.query_store_query クエリ ストアで個別に追跡および強制されるクエリ エントリ。Query entries that are tracked and forced separately in Query Store. 単一のクエリ テキストが異なるコンテキスト設定で実行される場合、または異なる Transact-SQLTransact-SQL モジュール (ストアド プロシージャやトリガーなど) の外側と内側で実行される場合は、複数のクエリ エントリが生成される可能性があります。A single query text can produce multiple query entries if it's executed under different context settings or if it's executed outside versus inside different Transact-SQLTransact-SQL modules, such as stored procedures and triggers.
sys.query_store_plansys.query_store_plan コンパイル時間の統計を含むクエリの見積もりプランを表示します。Presents estimated plan for the query with the compile time statistics. 格納されたプランは、SET SHOWPLAN_XML ON を使用して取得したものと同じです。Stored plan is equivalent to one that you get by using SET SHOWPLAN_XML ON.
sys.query_store_runtime_stats_intervalsys.query_store_runtime_stats_interval クエリ ストアは、自動的に生成される時間枠 (間隔) ごとに時間を分割し、すべての実行済みプランにその間隔で集計された統計を格納します。Query Store divides time into automatically generated time windows (intervals) and stores aggregated statistics on that interval for every executed plan. 間隔のサイズは、(Management StudioManagement Studio の) 構成オプションの統計収集間隔、または ALTER DATABASE の SET オプション (Transact-SQL) を使用する INTERVAL_LENGTH_MINUTES によって制御されます。The size of the interval is controlled by the configuration option Statistics Collection Interval (in Management StudioManagement Studio) or INTERVAL_LENGTH_MINUTES using ALTER DATABASE SET Options (Transact-SQL).
sys.query_store_runtime_statssys.query_store_runtime_stats 実行済みプランで集計されたランタイム統計です。Aggregated runtime statistics for executed plans. キャプチャされたすべてのメトリックは、次の 4 つの統計関数の形式で表されます。平均、最小、最大、標準偏差の 4 つの統計関数の形式で表されます。All captured metrics are expressed in the form of four statistic functions: Average, Minimum, Maximum, and Standard Deviation.

クエリ ストアのビューについて詳しくは、「クエリのストアを使用した、パフォーマンスの監視」の「関連するビュー、関数、プロシージャ」セクションを参照してください。For more information on Query Store views, see the "Related Views, Functions, and Procedures" section of Monitoring performance by using the Query Store.

クエリ処理Query processing

クエリ ストアでは、次の主なポイントでクエリ処理パイプラインとやり取りします。Query Store interacts with the query processing pipeline at the following key points:

  1. クエリを初めてコンパイルすると、クエリ テキストと初期プランがクエリ ストアに送信されます。When a query gets compiled for the first time, query text and the initial plan are sent to Query Store.

  2. クエリを再コンパイルすると、プランがクエリ ストアで更新されます。When a query gets recompiled, the plan is updated in Query Store. 新しいプランが作成されると、クエリ ストアでクエリの新しいプラン エントリが追加され、前のものはその実行統計とともに保持されます。If a new plan is created, Query Store adds the new plan entry for the query and keeps the previous ones along with their execution statistics.

  3. クエリを実行すると、ランタイム統計がクエリ ストアに送信されます。Upon the query execution, runtime statistics are sent to Query Store. クエリ ストアは、現在アクティブになっている間隔内で実行されたすべてのプランに対して正確な集計統計を保持します。Query Store keeps aggregated statistics accurate for every plan that was executed within the currently active interval.

  4. コンパイルおよび再コンパイルの確認フェーズ時に、SQL ServerSQL Server では、現在実行中のクエリに対して適用する必要があるプランがクエリ ストアにあるかどうかを判断します。During the compile and check for recompile phases, SQL ServerSQL Server determines if there's a plan in Query Store that should be applied for the currently running query. 強制プランがあり、プロシージャ キャッシュのプランが強制プランと異なる場合は、クエリが再コンパイルされます。If there's a forced plan and the plan in the procedure cache is different than the forced plan, the query gets recompiled. これは、実質的にはプラン ヒントがそのクエリに適用された場合と同じ方法です。This is effectively the same way as if PLAN HINT was applied to that query. この処理は、ユーザーのアプリケーションに透過的に行われます。This process happens transparently to the user application.

次の図は、前の手順で説明した統合のポイントを示しています。The following diagram depicts the points of integration explained in the previous steps:

クエリ ストア プロセスQuery Store process


I/O のオーバーヘッドを最小限に抑えるため、新しいデータはメモリ内にキャプチャされます。To minimize I/O overhead, new data is captured in-memory. 書き込み操作はキューに登録され、その後、ディスクにフラッシュされます。Write operations are queued and flushed to disk afterwards. 下図でプラン ストアとして示されている、クエリおよびプランの情報は、最小限の待機時間でフラッシュされます。Query and plan information, shown as Plan Store in the following diagram, are flushed with minimal latency. ランタイム統計情報として示されるランタイム統計は、SET QUERY_STORE ステートメントの DATA_FLUSH_INTERVAL_SECONDS オプションで定義された一定期間、メモリ内に保持されます。The runtime statistics, shown as Runtime Stats, are kept in memory for a period of time defined with the DATA_FLUSH_INTERVAL_SECONDS option of the SET QUERY_STORE statement. Management StudioManagement Studio クエリ ストア ダイアログ ボックスを使用して、 [データ フラッシュ間隔 (分)] の値を入力できます。これは、内部的に秒に変換されます。You can use the Management StudioManagement Studio Query Store dialog box to enter a value for Data Flush Interval (Minutes), which is internally converted to seconds.

クエリ ストア プロセス プランQuery Store process plan

システムがクラッシュした場合、またはトレース フラグ 7745 を使用しているときにシャットダウンが発生した場合、クエリ ストアでは、DATA_FLUSH_INTERVAL_SECONDS で定義された時間枠まで、収集されたもののまだ保存されていないランタイム データが失われる可能性があります。If the system crashes or a shutdown occurs while using trace flag 7745, Query Store can lose runtime data that has been collected but not yet persisted, up to a time window defined with DATA_FLUSH_INTERVAL_SECONDS. クエリ キャプチャのパフォーマンスとデータの可用性のバランスを取るために、既定値の 900 秒 (15 分) を使用することをお勧めします。We recommend the default value of 900 seconds (15 minutes) as a balance between query capture performance and data availability.


[最大サイズ (MB)] の制限は、厳密には適用されません。The Max Size (MB) limit isn't strictly enforced. ストレージ サイズは、クエリ ストアでディスクにデータが書き込まれる場合にのみ確認されます。Storage size is checked only when Query Store writes data to disk. この間隔は、 [データのフラッシュ間隔] の値によって設定されます。This interval is set by the Data Flush Interval value. クエリ ストアでストレージ サイズの確認の合間に最大サイズの制限を超えた場合は、読み取り専用モードに移行します。If Query Store has breached the maximum size limit between storage size checks, it transitions to read-only mode. [サイズ ベースのクリーン アップモード] が有効になっている場合は、最大サイズの制限を適用するクリーンアップ メカニズムもトリガーされます。If Size Based Cleanup Mode is enabled, the cleanup mechanism to enforce the maximum size limit is also triggered.


メモリ不足が発生した場合、DATA_FLUSH_INTERVAL_SECONDS で定義されている時間より前に、ランタイム統計がディスクにフラッシュされる可能性があります。If the system is under memory pressure, runtime statistics can be flushed to disk earlier than defined with DATA_FLUSH_INTERVAL_SECONDS.

クエリ ストア データの読み取り中は、メモリ内のデータとディスク上のデータが透過的に統合されます。During the read of the Query Store data, in-memory and on-disk data are unified transparently.

セッションが終了された場合、またはクライアント アプリケーションが再起動またはクラッシュした場合、クエリ統計は記録されません。If a session is terminated or the client application restarts or crashes, query statistics won't be recorded.

クエリ ストア プロセス プラン情報Query Store process plan information

関連項目See also

クエリ ストアを使用した、パフォーマンスの監視Monitoring performance by using the Query Store
クエリ ストアを使用する際のベスト プラクティスBest practice with Query Store
クエリ ストアのカタログ ビュー (Transact-SQL)Query Store Catalog Views (Transact-SQL)