Управление автоматическим выполнением хранимых процедур

Управление процессом компиляции хранимой процедуры

Компиляция происходит при первом вызове хранимой процедуры. При последующих вызовах хранимой процедуры SQL Server пользуется планом выполнения, который содержится в процедурном кэше. Это позволяет зна­чительно повысить быстродействие системы, поскольку при этом экономится время, затрачиваемое на осуществление компиляции. Однако процедурный кэш не является безразмерным, на его поддержание уходит значительная часть оперативной памяти сервера. Поэтому рекомендуется размещать в нем планы выполнения только наиболее интенсивно используемых хранимых процедур. Можно предписать системе не осуществлять кэширование плана выполнения тех хранимых процедур, что вызываются от случая к случаю. В этом случае повторная компиляция процедуры будет производиться при каждом ее вызове. С другой стороны, перекомпилировать хранимую процедуру при каждом ее вызове зачастую бывает выгодно, поскольку при этом создается новый план, который в большей степени учитывает интенсивное изменение статистических данных. Чтобы сделать это возможным, при определении хранимой процедуры воспользуйтесь ключевым словом RECOMPILE.

СОВЕТ:

При компиляции хранимой процедуры оптимизатор запросов использует статистические дан­ные. Поэтому, во-первых, позаботьтесь о том, чтобы эти данные обновлялись регулярно. Во-вторых, если вы имеете дело с быстро растущей таблицей, время от времени выполняйте пе­рекомпиляцию хранимой процедуры.

Можно спровоцировать принудительную перекомпиляцию хранимой проце­дуры с именем procedure, воспользовавшись следующей хранимой процедурой:

sp_recompile [@objname =] 'procedure'. В результате при следующем вызове указанной хранимой процедуры оптими­затором запросов будет произведена перекомпиляция ее кода.

Вы можете предписать системе инициировать выполнение хранимой процедуры ав­томатически при каждом запуске SQL Server. Зачастую подобный подход использу­ется для осуществления различных административных задач. Например, можно на­писать процедуру, которая при старте системы производит проверку целостности базы данных, а затем осуществляет резервное копирование этой базы данных. Ино­гда автоматически запускаемые хранимые процедуры используют для создания временных таблиц в базе данных tempdb. Это гарантирует, что при каждом запуске SQL Server вы будете получать одинаковый набор временных таблиц.

Определить для хранимой процедуры возможность автоматического запуска могут только участники стандартных ролей сервера sysadmin и setupadmin. Для этой цели используется специальная хранимая процедура

sp_procoptioir[[(aprocName =] 'procedure']

Параметр procedure определяет имя хранимой процедуры, для которой необ­ходимо сконфигурировать автоматический запуск. При этом в процессе выпол­нения данная процедура будет обладать тем же набором прав, что и участник стандартной роли сервера sysadmin.

Каждая автоматически запущенная процедура выполняется в контексте от­дельного соединения с сервером. Поэтому чем больше подобных хранимых процедур запущено, тем меньше соединений остается для пользователей. Чтобы свести к минимуму число соединений, задействованных для обслуживания авто­матически выполняемых хранимых процедур, Microsoft рекомендует построить процесс запуска процедур по следующей схеме. При старте сервера запускается всего одна хранимая процедура, которая затем вызывает другую. Таким образом, для выполнения процедур требуется всего лишь одно соединение. При этом, однако, необходимо следить за тем, чтобы не превысить допустимый уровень вложенности хранимых процедур, равный 32. При попытке превысить этот уровень система выдает сообщение об ошибке. Получить информацию о степени вложенности можно при помощи функции @@NESTLEVEL.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: