Создание и управление индексами. Создание и управление встроенными процедурами. Оптимизация производительности запросов. Управление транзакциями и блокировками, страница 13

Встроенные процедуры – это именованная коллекция операторов Transact-SQL хранящаяся на сервере. Встроенные процедуры – это метод выполнения повторяющихся задач. Они поддерживают переменные, объявленные пользователем условное выполнение, и другие сильные возможности программирования.

Сервер SQL поддерживает 5 типов встроенных процедур:

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

Локальные встроенные процедуры – создаются в определённых пользовательских таблицах.

Временные встроенные процедуры – могут быть локальными с именами, начинающимися с единичного знака # или глобальными начинающимися со знака ##. Локальные временные процедуры доступны только в единственной пользовательской сессии. Глобальные – доступны всем пользователям.

Удалённые встроенные процедуры – ранняя возможность SQL Server. Распределённые запросы теперь поддерживают эту функциональность.

Расширенные встроенные процедуры (xp_) – разрабатываются в виде DDL и выполняются вне окружения SQL Server. Обычно такие процедуры идентифицируются по префиксу xp_.Они выполняются схоже со встроенными процедурами.

Встроенные процедуры в SQL Server похожи на процедуры в других языках программирования и с ними вы можете:

*   Содержать операторы, которые выполняют операции в базе данных, включая возможность вызова других встроенных процедур;

*  Поддержка входных параметров;

*  Возврат статуса выполнения в вызывающую процедуру или batch для отображения удачного или ошибочного выполнения;

*  Возврат нескольких значений в вызывающую процедуру или batch в форме выходных параметров.

Инициализация процесса встроенной процедуры

Выполнение встроенной процедуры включает её создание, и после этого выполнение в первый раз, когда план выполнения помещается в кэш. Кэш процедур это пространство памяти, содержащее план выполнения всех выполняемых сейчас операторов Transact-SQL. Размер КЭШа изменяется, динамически соответствуя необходимому уровню.

Когда встроенная процедура создаётся, операторы проверяются на синтаксическую корректность. После этого, сервер SQL хранит имя встроенной процедуры в системной таблице sysobjects, а текст процедуры в системной таблице syscomments текущей базы данных. Если синтаксис ошибочен, то возвращается ошибка и встроенная процедура не сохраняется.

Процесс вызова имён с задержкой позволяет встроенным процедурам ссылаться на объекты, которые не существуют в момент создания процедуры. Этот процесс добавляет эластичности, потому что встроенные процедуры и объекты, на которые она ссылается, могут создаваться в любом порядке. Объекты должны существовать в момент выполнения процедуры. Имена проверяются во время выполнения процедуры.

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

Некоторые изменения в базе данных могут изменить план выполнения, делая его неэффективным или недействительным. Сервер определяет эти изменения и автоматически перекомпилирует план, когда возникает что-то из следующего:

*  Любые структурные изменения сделанные в таблице или просмотрщике ссылающемся в запросе (ALTER TABLE или ALTER VIEW).

*  Сгенерирована новая статистика с помощью оператора UPDATE STATISTIC.

*  Индекс, используемый планом выполнения удалён.

*  Сделаны значительные изменения в ключах (операторы INSERT, DELETE).

Когда встроенная процедура удачно проверена в состояние выполнения, оптимизатор запросов анализирует операторы Transact-SQL во встроенной процедуре и создаёт план, который содержит быстрый метод для доступа к данным. Для того чтобы сделать это, оптимизатор определяет: