Поделиться через


Оценка кратности (CE) отзывы

Область применения: SQL Server 2022 (16.x) и более поздних версий.

Начиная с SQL Server 2022 (16.x), обратная связь оценки кратности (CE) является частью интеллектуального семейства функций обработки запросов и устраняет неоптимальные планы выполнения запросов для повторяющихся запросов, когда эти проблемы возникают из неправильных предположений модели CE. Этот сценарий помогает снизить риски регрессии, связанные с оценкой кратности по умолчанию при обновлении предыдущих версий ядра СУБД.

Так как ни один из наборов моделей CE не может удовлетворить широкий спектр клиентских рабочих нагрузок и распределений данных, обратная связь CE предоставляет адаптируемое решение, основанное на характеристиках среды выполнения запросов. Отзывы CE идентифицируют и используют модель, которая лучше соответствует заданному запросу и распределению данных для улучшения качества плана выполнения запросов. В настоящее время отзывы CE могут определить операторы плана, где предполагаемое количество строк и фактическое количество строк очень отличаются. Обратная связь применяется при возникновении значительных ошибок оценки модели, и есть жизнеспособная альтернативная модель, которую следует попробовать.

Сведения о других функциях обратной связи о запросах см. в разделе отзывов о предоставлении памяти и степень параллелизма (DOP).

Общие сведения об оценке кратности (CE)

Оценка кратности (CE) заключается в том, как оптимизатор запросов может оценить общее количество строк, обработанных на каждом уровне плана запроса. Оценка кратности в SQL Server главным образом определяется на основе гистограмм, которые создаются автоматически или вручную после создания индексов или статистик. Иногда SQL Server также использует сведения об ограничениях и логические перезаписи запросов для определения кратности.

В разных версиях ядра СУБД используются разные предположения модели CE в зависимости от того, как распределяются и запрашиваются данные. Дополнительные сведения см. в статье о версиях CE.

Реализация оценки кратности (CE) отзывов

Оценка кратности (CE) отзывов узнает, какие предположения модели CE являются оптимальными с течением времени, а затем применяет исторически наиболее правильное предположение:

  1. Обратная связь CE определяет предположения, связанные с моделью, и оценивает, точны ли они для повторяющихся запросов.

  2. Если предположение выглядит неверным, последующее выполнение того же запроса проверяется с помощью плана запроса, который корректирует важное предположение модели CE и проверяет, помогает ли оно. Мы определяем неправильность, просматривая фактические и предполагаемые строки из операторов плана. Не все ошибки могут быть исправлены вариантами модели, доступными в отзыве CE.

  3. Если это улучшает качество плана, старый план запроса заменяется планом запроса, который использует соответствующее указание запроса USE HINT, корректирующее модель оценки, реализованную с помощью механизма Указание хранилища запросов.

Сохраняется только проверенный отзыв. Обратная связь CE не используется для этого запроса, если скорректированное предположение модели приводит к снижению производительности. В этом контексте отмененный пользователем запрос также воспринимается как регрессия.

Сценарии оценки кратности (CE) обратной связи

Оценка кратности (CE) устраняет предполагаемые проблемы регрессии, вызванные неправильными предположениями модели CE при использовании CE по умолчанию (CE120 или более поздней) и могут выборочно использовать различные предположения модели. К сценариям относятся корреляция, присоединение и цель строки оптимизатора.

Корреляция обратной связи оценки кратности (CE)

Когда оптимизатор запросов оценивает выборку предикатов для заданной таблицы, представления или количества строк, удовлетворяющих указанному предикату, он использует предположения модели корреляции. Этими предположениями могут быть предикаты:

  • Полностью независимый (по умолчанию для CE70), где кратность вычисляется путем умножения избирательности всех предикатов.

  • Частично коррелированный (по умолчанию для CE120 и выше), где кратность вычисляется с помощью варианта экспоненциальной задержки, с упорядочением избирательности от самого избирательного до наименее избирательного предиката.

  • Полностью коррелированный, где кратность вычисляется с помощью минимальной избирательности для всех предикатов.

В следующем примере используется частичная корреляция, когда для совместимости базы данных задано значение 120 или выше:

USE AdventureWorks2016_EXT;
GO
SELECT AddressID, AddressLine1, AddressLine2
FROM Person.Address
WHERE StateProvinceID = 79 AND City = N'Redmond';
GO

Если для совместимости базы данных задано значение 160, а корреляция по умолчанию используется, обратная связь CE пытается переместить корреляцию в правильное направление на один шаг за раз на основе того, было ли предполагаемое кратность недооценена или превышена по сравнению с фактическим числом строк. Используйте полную корреляцию, если фактическое число строк больше предполагаемой кратности. Используйте полную независимость, если фактическое количество строк меньше предполагаемой кратности.

Дополнительные сведения см. в статье о версиях CE.

Оценка кратности (CE) соединения отзывов

Когда оптимизатор запросов оценивает избирательность предикатов соединения и применимых предикатов фильтров, он использует предположения модели автономности. К предположениям относятся:

  • Простая автономность (по умолчанию для CE70) предполагает, что предикаты соединения полностью коррелированы, при этом сначала вычисляется избирательность фильтра, а затем учитывается избирательность соединения.

  • Базовое содержимое (по умолчанию для CE120 и более поздних версий) предполагает отсутствие корреляции между предикатами соединения и подчиненными фильтрами, где сначала вычисляется селекторность соединения, а затем коэффициент селективности фильтра.

В следующем примере используется базовая автономность, когда для совместимости базы данных задано значение 120 или выше:

USE AdventureWorksDW2016_EXT;
GO
SELECT *
FROM dbo.FactCurrencyRate AS f
INNER JOIN dbo.DimDate AS d ON f.DateKey = d.DateKey
WHERE d.MonthNumberOfYear = 7 AND f.CurrencyKey = 3 AND f.AverageRate > 1;
GO

Дополнительные сведения см. в статье о версиях CE.

Оценка кратности (CE) и цель строки оптимизатора запросов

Когда оптимизатор запросов оценивает кратность плана выполнения, он обычно предполагает, что должны быть обработаны все подходящие строки из всех таблиц. Однако из-за наличия некоторых шаблонов запросов оптимизатор запросов выполняет поиск плана, который будет возвращать меньшее количество строк для сокращения операций ввода-вывода. Если запрос указывает целевое число строк (цель строки), которые могут ожидаться во время выполнения с помощью TOPINEXISTS ключевых слов, FAST подсказки запроса или SET ROWCOUNT инструкции, цель строки используется как часть процесса оптимизации запросов, например в следующем примере:

USE AdventureWorks2016_EXT;
GO
SELECT TOP 1 soh.*
FROM Sales.SalesOrderHeader AS soh
INNER JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID;
GO

Когда применяется план цели строки, расчетное количество строк в плане запроса уменьшается, так как оптимизатор запросов предполагает, что для достижения цели строки необходимо обработать меньшее количество строк.

Хотя цель строки является полезной стратегией оптимизации для определенных шаблонов запросов, если данные не равномерно распределены, больше страниц может быть сканировано, чем оценивается, то есть цель строки становится неэффективной. Обратная связь CE может отключить сканирование цели строки и включить поиск при обнаружении этой неэффективности.

В плане выполнения нет атрибутов, относящихся к отзыву CE, но есть атрибут, указанный для указания хранилище запросов. Найдите, QueryStoreStatementHintSource чтобы быть CE feedback.

Рекомендации по оценке кратности (CE)

  • Чтобы включить оценку кратности (CE), включите уровень совместимости базы данных 160 для базы данных, к к ней подключенной при выполнении запроса. Хранилище запросов необходимо включить и в режиме READ_WRITE для каждой базы данных, в которой используется обратная связь CE.

  • Чтобы отключить обратную связь CE на уровне базы данных, используйте конфигурацию с областью CE_FEEDBACKдействия базы данных. Например, в пользовательской базе данных:

    ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK = OFF;
    
  • Чтобы отключить обратную связь CE на уровне запроса, используйте указание запроса DISABLE_CE_FEEDBACK.

Действия обратной связи CE отображаются с помощью XEvents query_feedback_analysis и query_feedback_validation.

Подсказки, установленные обратной связью CE, можно отслеживать с помощью представления каталога sys.query_store_query_hints.

Сведения о отзыве можно отслеживать с помощью представления каталога sys.query_store_plan_feedback .

Если запрос имеет план запроса, принудительный через хранилище запросов, для этого запроса не используется обратная связь CE.

Если запрос использует жестко закодированные подсказки или использует хранилище запросов подсказки, заданные пользователем, отзывы CE не используются для этого запроса. Дополнительные сведения см. в указаниях запросов и хранилище запросов подсказках.

Начиная с SQL Server 2022 (16.x), когда включена хранилище запросов для вторичных реплик, обратная связь CE не учитывается для вторичных реплик в группах доступности. Обратная связь CE в настоящее время обеспечивает только основные реплики. При отработках отказа обратная связь, примененная к первичной или вторичной реплике, теряется. Дополнительные сведения см. в хранилище запросов для вторичных реплик.

Сохраняемость для оценки кратности (CE) отзывов

Область применения: SQL Server (начиная с SQL Server 2022 (16.x))

Обратная связь по кратности (CE) может обнаруживать сценарии, когда следует сохранять оптимизацию цели строк и сохранять это изменение, сохраняя его в хранилище запросов в виде указания хранилища запросов. Новая оптимизация используется для будущих выполнения запроса. Отзывы CE сохраняют другие сценарии за пределами шаблонов запросов оптимизации строк, как описано в сценариях обратной связи. Обратная связь CE в настоящее время обрабатывает сценарии выбора предиката, используемые моделью корреляции CE, и сценарии объединения предиката, которые обрабатываются моделью хранения CE.

Эта функция появилась в SQL Server 2022 (16.x), однако это повышение производительности доступно для запросов, работающих на уровне совместимости базы данных 160 или выше, или QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n указание 160 и выше, а также при включении хранилище запросов для базы данных и находится в состоянии "чтение записи".

Известные проблемы с оценкой кратности (CE) отзывов

Проблема Дата обнаружения Состояние Дата разрешения
Низкая производительность SQL Server после применения накопительного обновления 8 для SQL Server 2022 (16.x) в определенных условиях. Вы можете столкнуться с резким использованием памяти кэша планов, а также непредвиденным увеличением использования ЦП при включенной обратной связи CE. Декабрь 2023 г. (Обновлено за май 2024 г.) Решение

Известные проблемы

Низкая производительность SQL Server после применения накопительного обновления 8 для SQL Server 2022 в определенных условиях

Начиная с sql Server 2022 (16.x) накопительного обновления 8 SQL Server может привести к неожиданному увеличению использования ЦП и памяти. Кроме того, может наблюдаться увеличение RESOURCE_SEMAPHORE_QUERY_COMPILE ожиданий. Кроме того, вы можете заметить устойчивый рост числа объектов кэша планов, которые подходят к ограничениям кэша планов и вручную очищают кэш планов с такими методами, как ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE, DBCC FREESYSTEMCACHEили DBCC FREEPROCCACHE не предоставляют помощь. Это поведение наблюдалось только несколькими клиентами.

Эта проблема не влияет на все рабочие нагрузки и зависит от количества различных планов, созданных, а также количества планов, которые были доступны для взаимодействия с функцией обратной связи CE. В то время как отзывы CE анализируют операторы плана для значительных неправильной оценки моделей, существует сценарий, в котором указанный план можно разослать во время этого этапа анализа. Эта ситуация предотвращает удаление плана из памяти с помощью обычного алгоритма наименее недавно использованного (LRU). Механизм LRU один из способов применения sql Server политик вытеснения планов. SQL Server также удаляет планы из памяти, если система находится под давлением памяти. Когда SQL Server пытается удалить планы, которые были удалены неправильно, не удается удалить эти планы из кэша планов, что приводит к продолжению роста кэша. Растущий кэш может привести к дополнительным компиляциям, которые в конечном итоге используют больше ЦП и памяти. Дополнительные сведения см. в разделе "Внутренние кэши планов".

Симптом: количество используемых записей кэша планов и помечено как грязные из планов SQL или планов объектов увеличивается со временем до 50 000 или более. Если вы наблюдаете записи кэша планов, которые начинают приближаться к этому уровню вместе с непредвиденным увеличением использования ЦП, ваша система может столкнуться с этой проблемой. Исправление предоставляется с накопительным пакетом обновления 12 sql Server 2022 (16.x). См . KB5033663.

Чтобы отслеживать количество записей кэша планов, используемых системой, можно использовать в качестве точки во времени количество существующих записей кэша планов. Например, просмотр количества записей кэша планов, помеченных как грязные, периодически с течением времени является одним из способов отслеживания этого явления.

SELECT
  CASE
    WHEN mce.[name] LIKE 'SQL Plan%' THEN 'SQL Plans'
    WHEN mce.[name] LIKE 'Object Plan%' THEN 'Object Plans'
    ELSE '[All other cache stores]'
  END AS PlanType,
  COUNT(*) AS [Number of plans marked to be removed]
FROM sys.dm_os_memory_cache_entries AS mce
LEFT OUTER JOIN sys.dm_exec_cached_plans AS ecp
  ON mce.memory_object_address = ecp.memory_object_address
WHERE mce.is_dirty = 1
AND ecp.bucketid is NULL
GROUP BY
  CASE
    WHEN mce.[name] LIKE 'SQL Plan%' THEN 'SQL Plans'
    WHEN mce.[name] LIKE 'Object Plan%' THEN 'Object Plans'
    ELSE '[All other cache stores]'
  END;

Другой набор запросов, которые также предоставляют те же сведения, что и предыдущий пример, а также позволяет наблюдать за дополнительными метриками производительности. Коэффициенты попаданий в кэш планов снижаются, а также количество компиляций в отношении количества пакетных запросов в секунду. Следующие запросы можно использовать для мониторинга системы с течением времени. Сохраняя внимание на коэффициенте попадания кэша (непреднамеренный спад), используемых объектов кэша (увеличивается число до уровней, приближающихся к 50 000 без уменьшения) и ниже ожидаемого коэффициента пакетных запросов/с по сравнению с ростом компиляций/с.

--SQL Plan (Adhoc and Prepared plans)
SELECT
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN 'Cache Hit Ratio'
        WHEN [counter_name] = 'Cache Object Counts' THEN 'Cache Object Counts'
        WHEN [counter_name] = 'Cache Objects in use' THEN 'Cache Objects in use'
        WHEN [counter_name] = 'Cache Pages' THEN 'Cache Pages'
    END AS [SQLServer:Plan Cache (SQL Plans)],
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN NULL
        ELSE FORMAT(cntr_value, '#,###')
    END AS [Counter Value],
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN
            FORMAT(TRY_CONVERT(DECIMAL(5, 2), (cntr_value * 1.0 / NULLIF((SELECT cntr_value
        FROM sys.dm_os_performance_counters WHERE
        [object_name] LIKE '%:Plan Cache%' AND [counter_name] = 'Cache Hit Ratio Base'
        AND instance_name LIKE 'SQL Plan%'), 0))), '0.00%')
    END AS [SQL Plan Cache Hit Ratio]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%:Plan Cache%'
    AND [counter_name] IN ('Cache Hit Ratio', 'Cache Object Counts', 'Cache Objects in use', 'Cache Pages')
    AND instance_name LIKE 'SQL Plan%'
ORDER BY [counter_name];

--Module/Stored procedure based plans
SELECT
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN 'Cache Hit Ratio'
        WHEN [counter_name] = 'Cache Object Counts' THEN 'Cache Object Counts'
        WHEN [counter_name] = 'Cache Objects in use' THEN 'Cache Objects in use'
        WHEN [counter_name] = 'Cache Pages' THEN 'Cache Pages'
    END AS [SQLServer:Plan Cache (Object Plans)],
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN NULL
        ELSE FORMAT(cntr_value, '#,###')
    END AS [Counter Value],
    CASE
        WHEN [counter_name] = 'Cache Hit Ratio' THEN
            FORMAT(TRY_CONVERT(DECIMAL(5, 2), (cntr_value * 1.0 / NULLIF((SELECT cntr_value
        FROM sys.dm_os_performance_counters WHERE
        [object_name] LIKE '%:Plan Cache%' AND [counter_name] = 'Cache Hit Ratio Base'
        AND instance_name LIKE 'Object Plan%'), 0))), '0.00%')
    END AS [SQL Plan Cache Hit Ratio]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%:Plan Cache%'
    AND [counter_name] IN ('Cache Hit Ratio', 'Cache Object Counts', 'Cache Objects in use', 'Cache Pages')
    AND instance_name LIKE 'Object Plan%'
ORDER BY [counter_name];

SELECT
    CASE
        WHEN [counter_name] = 'Batch Requests/sec' THEN 'Batch Requests/sec'
        WHEN [counter_name] = 'SQL Compilations/sec' THEN 'SQL Compilations/sec'
    END AS [SQLServer:SQL Statistics],
    FORMAT(cntr_value, '#,###') AS [Counter Value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%:SQL Statistics%'
AND counter_name IN ('Batch Requests/sec', 'SQL Compilations/sec'
);

Обходное решение

Если система продолжает испытывать симптомы, описанные ранее, после применения накопительного обновления 12 KB5033663, функция обратной связи CE может быть отключена на уровне базы данных.

Чтобы освободить память кэша плана, занятую этой проблемой, требуется перезапуск экземпляра SQL Server. Это действие перезапуска можно предпринять после отключения функции обратной связи CE. Чтобы отключить обратную связь CE на уровне базы данных, используйте конфигурацию с областью CE_FEEDBACKдействия базы данных. Например, в пользовательской базе данных:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK = OFF;

Проблемы с отзывами и отчетами

Отзывы или вопросы, электронная почта CEFfeedback@microsoft.com