SomewhereSomehow's Notes

Фильтр по тегу: tf 9481


USE HINT и FORCE_LEGACY / DEFAULT_CARDINALITY_ESTIMATION

Продолжаем рассматривать примеры использования хинтов при помощи USE HINT.

В этой заметке мы посмотрим, как управлять версией механизма оценки кардинальности с помощью хинтов FORCE_DEFAULT_CARDINALITY_ESTIMATION и FORCE_LEGACY_CARDINALITY_ESTIMATION.

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

До 2014 сервера, была всего одна версия этого компонента, разработанная для SQL Server 7.0, постепенно адаптируемая к новым версиям, но принципиально не меняющаяся. Со временем, разработчики сиквела поняли, что старую модель больше развивать нельзя – ее трудно расширять, трудно тестировать, любые изменения в одном месте могут приводить к поломкам в другом, кроме того, те предположения о реальности, которые были верны во времена SQL Server 7.0, сейчас устарели.

Начиная с SQL Server 2014 у сервера появилась новая модель оценки строк, адаптированная к современным рабочим нагрузкам. Эта модель оценки имеет новую архитектуру, расширяема и дополняема, версия этой модели получила номер 120 (по аналогии с уровнем совместимости БД, соответствующим серверу 2014 – 120). В 2016 сервере современная модель была расширена и получила номер версии 130, при этом версия 120 сохранилась. В еще не вышедшем, на момент написания статьи, RTM сервере vNext уже есть модель версии 140.

Читать дальше...
добавлено: 05 фев 17 просмотры: 917, комментарии: 0