Пороги

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

Отметим, что Sybase не поставляет никаких стандартных хранимых процедур, по умолчанию связанных с порогами. Кажется, что механизм порогов специально предназначен для предотвращения переполнения сегмента журнала транзакций (logsegment). могут оказать существенную помощь и при контроле других сегментов баз данных. Например, выполняющаяся при срабатывании порога хранимая процедура с помощью команд print или raiserror легко может выдать в журнал регистрации ошибок сервера необходимое сообщение.

SQL Server поддерживает два типа порогов. При создании порогов первого типа вы указываете название базы данных и соответствующего сегмента, контролируемого устанавливаемым порогом;

значение порога в виде количества остающихся свободных страниц; название хранимой процедуры, активизируемой при уменьшении количества свободных страниц ниже значения порога. второго типа называются порогами последнего уровня (last-chance thresholds) и устанавливаются только по отношению к сегменту журнала транзакций (logsegment) каждой базы данных сервера.

Задача порога последнего уровня — обеспечить наличие в текущей копии журнала транзакций достаточного свободного пространства для нормального выполнения команды dump transaction. Этот порог автоматически устанавливается в момент создания базы данных, если ее сегмент журнала транзакций вынесен на отдельное серверное устройство.

Значение порога последнего уровня (минимальное количество свободных страниц в logsegment) также определяется автоматически и изменяется при добавлении к сегменту журнала транзакций дополнительного дискового пространства. При сокращении свободного пространства журнала транзакций ниже уровня порога последнего уровня сервер автоматически выполняет системную хранимую процедуру sp__thresholdaction.

Важно отметить, что в отличие от порогов первого типа, активируемой порогом последнего уровня хранимой процедуре по умолчанию присваивается имя sp_thresholdaction. Однако для каждой отдельной базы данных название этой процедуры может быть изменено процедурой sp_modifythreshold. Имейте в виду, что Sybase не поставляет вместе сервером готовой процедуры sp_thresholdaction. Поэтому, если она отсутствует, срабатывание порога последнего уровня не повлечет
за собой никаких действий сервера. Обычно в состав этой процедуры включается команд dump transaction или другие необходимые команды, а также выдача соответствующих сообщений в журнал регистрации ошибок сервера командами print или raiserror. Эту процедуру следует назвать sp_thresholdaction и поместить в базу данных sybsystemprocs, чтобы сделать доступной для порогов последнего уровня всех баз данных сервера.

Существует важная особенность процесса установки порогов, пренебрежение которой может привести к серьезным неприятностям. Порог последнего уровня автоматически устанавливается для каждой базы данных, созданной в SQL Server System 10 и System 11. Однако это не относится к базам данных предыдущих версий, переносимых в серверы System 10 и System 11.

Поэтому по завершении перехода от SQL Server 4.9.2 на сервер System 10 или System 11 ни одна из баз данных предыдущей версии сервера не будет иметь порога последнего уровня. Его необходимо установить вручную командой

select lct_admin (”lastchance”, db_id())

Рекомендуем читателю проверить наличие порогов последнего уровня во всех базах данных своего сервера. Приведенный ниже пример относится к SQL Server System 11:

1> use psychodb
2> go
1> sp_helpthreshold
2> go

segment name free pages last chance? threshold procedure
logsegment 744 1 sp_thresholdaction

(1 row affected, return status = 0)
Как видите, в базе данных psychodb действительно имеется порог, являющийся порогом последнего уровня. Давайте теперь проверим еще одну базы данных:
1> use psychodb2
2> go
1> sp_helpthreshold
2> go
segment name free pages last chance? threshold procedure

(0 row affected, return status = 0 )
Почему же вторая база данных не имеет порога последнего уровня? Оказывается, нынешний сервер System 11 был установлен на место SQL Server System 10, который поддерживает пороги последнего уровня. Поэтому они активизированы во всех базах данных сервера System 10, дампы которых были загружены в сервер System 11 при его установке. Однако, сервер System 10 был установлен вместо SQL Server4.9.2. В процессе перехода на System 10 в базе данных psychodb2 и некоторых других забыли установить пороги последнего уровня, наличие или отсутствие которых не проверяется программой установки System 11. Администратору сервера нужно было выполнить все необходимые
проверки вручную.

Наша следующая задача — установить пропущенный порог последнего уровня в базе данных psychodb2. Соответствующая команда сервера имеет вид
select lct_admin (”lastchance”, db_id())

где db_id() является функцией, возвращающей идентификатор базы данных, в которой требуется установить порог последнего уровня. Этот идентификатор может не совпадать с идентификатором текущей базы данных. Ошибка в указании идентификатора может привести к ненулевому результату.

Поэтому обязательно убедитесь с помощью процедуры sp_helpthreshold в активации порога последнего уровня именно нужной вам базы данных. (Для этого sp_helpthreshold следует вызвать дважды — до и после выполнения команды select.) В нашем случае базе данных psychodb2 соответствует db_id() = 9. Команда select возвращает значение 1232, представляющее собой количество свободных страниц, при котором сработает порог последнего уровня. Как отмечалось выше, это значение зависит от размеров базы данных.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100