Сбор данных в хранилище запросовHow Query Store collects data

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse AnalyticsПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure 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.

Представления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) или параметром INTERVAL_LENGTH_MINUTES с помощью параметров ALTER DATABASE SET (Transact-SQL).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. Все собранные показатели выражаются в виде четырех статистических функций: Average (среднее), Maximum (максимум), Minimum (минимум), Standard Deviation (стандартное отклонение).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. как если бы указание PLAN HINT было применено к этому запросу.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

RemarksRemarks

Чтобы свести к минимуму издержки ввода-вывода, новые данные записываются в память.To minimize I/O overhead, new data is captured in-memory. Операции записи ставятся в очередь и записываются на диск позже.Write operations are queued and flushed to disk afterwards. Сведения о запросах и планах (на схеме ниже это Plan Store) записываются на диск с минимальной задержкой.Query and plan information, shown as Plan Store in the following diagram, are flushed with minimal latency. Статистика времени выполнения (Runtime Stats) хранится в памяти в течение времени, заданного параметром DATA_FLUSH_INTERVAL_SECONDS инструкции SET QUERY_STORE.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

В случае сбоя или завершения работы системы при использовании флага trace 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.

Важно!

Ограничение Максимальный размер (МБ) не применяется строго.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)