Заметки Дмитрия Пилюгина о Microsoft SQL Server 

Twitter RSS
Home SQL Server (все заметки) Archive for category "оптимизатор"
formats

USE HINT и DISABLE_OPTIMIZER_ROWGOAL

В данной заметке мы разберемся что такое Row Goal для оптимизатора запроса, в каком случае он может навредить производительности, а также возможность его отключения для запроса при помощи подсказки DISABLE_OPTIMIZER_ROWGOAL.

 
formats

USE HINT и ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS

В этой публикации мне бы хотелось вернуться к подсказкам USE HINT, представленным впервые в SQL Server 2016 SP1. Часть из них мы уже рассмотрели в предыдущих статьях, в этой статье мы рассмотрим очередную подсказку – ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS, которая влияет на алгоритм оценки числа строк в соединениях. В статье мы немного поговорим о теории оценки соединений и

Read More…

 
formats

SQL Server 2019: Действительный план запроса

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

 
formats

SQL Server 2017: Adaptive Query Processing

В этой публикации я хочу поговорить о новых методах обработки запросов, которые призваны бороться с ошибками в оценках кардинальности, предполагаемом числе строк в операторах плана запроса, и улучшать производительность. Эти методы объединяются под общим названием – Adaptive Query Processing, и состоят из трех основных компонентов: Adaptive Memory Grant Feedback Interleaved Execution Adaptive Joins Далее мы

Read More…

 
formats

USE HINT и ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES

В одной из предыдущих заметок мы говорили о таком механизме как Cardinality Estimator. Cardinality Estimation, СЕ (оценка кардинальности) – это оценка предполагаемого числа строк, которое будет обработано тем или иным оператором запроса. Оценка – один из ключевых факторов при построении плана запроса. Оценку числа строк осуществляет компонент Cardinality Estimator. Хинт ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES контролирует один из аспектов

Read More…

 
formats

USE HINT и DISABLE_PARAMETER_SNIFFING

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

Read More…

 
formats

USE HINT и ENABLE_QUERY_OPTIMIZER_HOTFIXES

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

Read More…

 
formats

USE HINT и FORCE_LEGACY/DEFAULT_CARDINALITY_ESTIMATION

Cardinality Estimation, СЕ (оценка кардинальности) – это оценка предполагаемого числа строк, которое будет обработано тем или иным оператором запроса. Оценка – один из ключевых факторов при построении плана запроса (более подробно я рассматривал эту тему в докладе кардинальность и планы выполнения). Оценку числа строк осуществляет компонент Cardinality Estimator. До 2014 сервера, была всего одна версия

Read More…

 
formats

USE HINT и DISABLE_OPTIMIZED_NESTED_LOOP

Один из доступных алгоритмов соединения двух таблиц в SQL Server это вложенные циклы (Nested Loops). В зависимости от выбранного оптимизатором порядка соединения таблиц, одна из таблиц выбирается как внешняя (по ней открывается внешний цикл), вторая как внутренняя (для каждой строки из внешней таблицы выполняется внутренний цикл по второй таблице), во время соединения, внутри циклов проверяется

Read More…

 
formats

USE HINT и новые указания запросов в SQL Server 2016 SP1

«Query Hints» в документации переводится как «указания запросов», кто-то называет их «подсказками», но чаще говорят просто «хинты». Я буду использовать в заметке именно последнее выражение, т.к. оно более распространено в повседневной жизни и сразу дает понять, о чем идет речь. Эта публикация — введение, она открывает цикл заметок по новым хинтам, которые появились в SQL

Read More…