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


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

Подходит для:Подходит для: SQL Server 2025 (17.x) предварительная версия Azure SQL DatabaseSQL баз данных в Microsoft Fabric

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

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

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

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

Хотя отпечатки пальцев не являются новой концепцией ядра СУБД 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, отличной от другой части одного запроса. Например, соединение между таблицами A и B может потребовать простого хранения и соединения между таблицами C и D, которые могут потребовать хранения базы.

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

Фильтры:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Соединения:

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

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

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

  • База данных должна использовать уровень совместимости 160 или выше.

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

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

Вы можете убедиться, что база данных использует обратную связь для функций выражений в предварительной версии SQL Server 2025 (17.x), выполнив следующие инструкции:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

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

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;
  • Обратная связь 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каталога.

Ограничения

Функция обратной связи CE для выражений в настоящее время не содержит следующих возможностей:

  • Сохраняемость: Сохраняемость хранилища запросов для таблицы отпечатков и подсказок уровня выражений будут доступны в более поздней версии CTP. После перезапуска SQL Server функция обратной связи для выражений должна заново изучить и применить рекомендации к текущей рабочей нагрузке.