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


Обратная связь по оценке кратности (CE) для выражений

Применимо к: SQL Server 2025 (17.x) База данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

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

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

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

Использование отзывов CE для выражений

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

Предварительные требования и конфигурация

Чтобы использовать обратную связь CE для выражений, необходимо выполнить следующие предварительные требования:

  • База данных должна использовать уровень совместимости 160 или более поздней версии.
  • CE_FEEDBACK_FOR_EXPRESSIONS Конфигурация с областью базы данных должна быть включена (включена по умолчанию).
  • Чтобы проверить текущее состояние конфигурации базы данных, выполните следующие действия.
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

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

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Чтобы отключить функцию обратной связи для выражений для базы данных, отключите конфигурацию, охватывающую базу данных CE_FEEDBACK_FOR_EXPRESSIONS.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

Принцип работы

Хотя отпечатки пальцев не являются новой концепцией ядра СУБД SQL Server, отпечатки пальцев в контексте обратной связи для функций выражений относятся к сочетанию вычисляемых подписей из выражения. Например, бизнес-аналитик в вымышленном бизнесе может пожелать получить информацию о любом из заказов своих клиентов, где эти клиенты потратили более 10 000 долларов. Оператор выбора, который включает сбор данных из таблицы Customers, присоединяясь также к таблице Orders, может быть одним из методов просмотра данных этого типа.

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

Для этого запроса оптимизатор запросов может выбрать получение данных из каждой таблицы, Customerа затем Ordersвыбрать все связанные столбцы из обеих таблиц и присоединить данные (с фильтром), где totalprice заказ превышает $10 000. Каждое логическое выражение, например фильтр или соединение в плане запроса, создает подпись, которая способствует отпечатку пальца. Отзывы CE для выражений используют эти отпечатки пальцев для изучения и применения обратной связи между запросами, которые совместно используют аналогичные вложенные выражения, даже если общая структура запросов отличается.

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

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

  • Запросы, в которых одна часть запроса может воспользоваться другой моделью CE, отличной от другой части одного запроса. Например, соединение между таблицами A и B может потребовать простого связывания, а соединение между таблицами C и D может потребовать основного связывания.

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

Filters:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Joins:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • Предположение о локализации базы (передавать подсказку не требуется)

Эти предположения отражают различные стратегии модели CE, такие как сдерживание и независимость. Дополнительные концептуальные сведения см. в обзоре оценки кратности, объясняемой Кейт Смитом и оценкой кратности для коррелированных столбцов в SQL Server 2016.

Жизненный цикл подсказки

Подсказки обратной связи проходят через следующие состояния:

  • Мониторинг: система наблюдает повторяющиеся выполнения подвыражений и отслеживает, сохраняется ли неправильная оценка кардинальности.
  • Применение. Если неправильное определение продолжается, можно создать и применить подсказку обратной связи во время компиляции запросов для корректировки модели CE.
  • Заблокировано: если примененная подсказка приводит к неоптимальной оценке кратности, она блокируется для дальнейшего использования.

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

Защита регрессии

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

Телеметрия и мониторинг

Отслеживание отзывов CE для выражений можно выполнять с помощью следующих инструментов:

  • Расширенные события:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

Расширенные события CE Feedback query_ce_feedback_begin_analysis и query_ce_feedback_telemetry также могут быть полезны при отслеживании активности функции.

  • Данные отпечатков пальцев кэшируются в выделенном клерке памяти с именем AdHocCEFeedbackCache. Доступ к этому кэшу можно получить с помощью представления sys.dm_exec_ce_feedback_cacheсистемного каталога.

  • Интеграция Showplan

    При применении обратной связи CE для выражений план запроса включает CardinalityFeedback атрибут в XML Showplan. Этот тег указывает, что обратная связь использовалась для корректировки оценки кратности для конкретной подэкспрессии.

Кэш и сохраняемость

Сохраняемая информация обратной связи хранится во внутренней таблице хранилища запросов (sys.plan_persist_ce_feedback_for_expressions) и загружается заново при запуске. Это гарантирует, что система не нуждается в повторном получении отзывов о тех отпечатках пальцев, с которыми она уже столкнулась. Механизм сохраняемости кэша имеет потери данных в своей сути, т. е. данные сохраняются на диск только периодически. Частота сохраняемости в настоящее время не настраивается.

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

Limitations

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