Новость из категории: Информация

Табличные переменные и временные таблицы в SQL Server 2014: кардинальность с флагом трассировки 2453. Продолжение

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

Затем создайте хранимую процедуру с именем GetOrders, которая принимает параметр TVP типа таблицы OrderlDs в качестве входных данных и присоединяет таблицу Orders с входным TVP, чтобы возвратить информацию о запрошенных заказах (см. код выше). Используйте программный код ниже, чтобы объявить табличную переменную типа таблицы OrderlDs, заполнить ее 100000 идентификаторами заказов, а затем вызвать процедуру GetOrders с табличной переменной в качестве входного параметра TVP.

Табличные переменные и временные таблицы в SQL Server 2014: кардинальность с флагом трассировки 2453. Продолжение
Заполнение табличной переменной

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

Табличные переменные и временные таблицы в SQL Server 2014: кардинальность с флагом трассировки 2453. Продолжение
План для соединения с хешем

Но что делать, если вы хотите задействовать хранимую процедуру с параметром TVP (например, нужно изменить табличную переменную), но не хотите выполнять принудительную перекомпиляцию при каждом выполнении кода? Компания Microsoft предложила решение в виде флага трассировки 2453, который упоминается как доступный в SQL Server 2014 RTM CU3 и SQL Server 2012 SP2. Если флаг трассировки установлен, изменения в табличных переменных приводят к перекомпиляции для нетривиальных планов на основе тех же пороговых значений, что и для других таблиц. Естественно, это ведет к уменьшению числа перекомпиляций по сравнению с принудительными перекомпиляциями при каждом выполнении кода. А когда перекомпиляция происходит, число строк становится известно оптимизатору. Любопытно, что, как объясняется в справочном материале для этого флага трассировки (http://support.microsoft.com/kb/2952444), в отличие от OPTION (RECOMPILE), он не приводит к встраиванию параметра в процессе перекомпиляции (parameter peeking). Для демонстрации данного решения (предполагается, что вы работаете с версией и сборкой, поддерживающими эту функцию), выполните программный код ниже.

Табличные переменные и временные таблицы в SQL Server 2014: кардинальность с флагом трассировки 2453. Продолжение
Работа с флагом трассировки

Программный код устанавливает флаг трассировки 2453 на уровне сеанса (укажите - 1 в качестве второго параметра, чтобы он действовал глобально), объявляет табличную переменную, заполняет ее 100000 строками, а затем объединяет таблицу Orders с табличной переменной, чтобы возвратить запрошенные заказы. К табличной переменной добавляется достаточное число строк, чтобы запустить перекомпиляцию на уровне инструкций, что в свою очередь позволяет оптимизатору правильно определить число строк в таблице. В результате для данного случая вы получаете тот же эффективный план, который показан на рисунке выше.

Чтобы снять флаг трассировки, используйте следующий программный код:
DBCC TRACE0FF (2453); 

используйте - 1 в качестве второго параметра, чтобы обеспечить глобальный эффект.

Табличные переменные и временные таблицы в SQL Server 2014: кардинальность с флагом трассировки 2453. Продолжение

Итак, мы рассмотрели пять усовершенствований в SQL Server 2014, два из которых были перенесены в SQL Server 2012. Некоторые улучшения, такие как определения встроенных индексов, типы таблиц, оптимизированных для размещения в оперативной памяти, и параметры TVP, представляют собой новые инструменты, которые вы будете использовать в новом программном коде. Другие новшества, такие как параллельные инструкции SELECT INTO и облегченные обязательные операции записи,— внутренние и не требуют никаких изменений в программном коде. Необходимо просто использовать нужные версию и сборку, и работа автоматически начинает выполняться быстрее. Оба типа улучшений можно только приветствовать.


Вот и все, мы закончили рассматривать табличные переменные и временные таблицы в SQL Server 2014 и теперь вы можете с чистой совестью приступить к делам более насущным - закончить строительство лестницы в вашем дом. И именно поэтому я хочу порекомендовать вам заглянуть на http://www.klinker-step.ru/catalog/stupeni-iz-keramogranita/ (http://www.klinker-step.ru/catalog/stupeni-iz-keramogranita/). Здесь вы сможете приобрести роскошные ступени из керамогранита, благодаря которым ваша новая лестница станет настоящей жемчужиной всего интерьерного дизайна.

<<К началу статьи

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх