Виды хранимых процедур

Язык хранимых процедур.

Хранимые процедуры.

Хранимые процедуры представляют собой подпрограмму, расположенную на сервере и вызываемую из приложения клиента. Использование этих объектов увеличивает скорость доступа к БД, по следующим причинам:

1) Вместо текста запроса, которые длинный, серверу передается по сети относительно короткое обращение к хранимой процедуре.

2) Хранимая процедура в отличии от запроса не требует синтаксической.

3) Хранимая процедура реализует для них единые правила для работы с БД.

Хранимые процедуры создаются с помощью утилит и там же отображаются и хранятся в разделе метаданные.

Для написания хранимых процедур триггеров используется язык хранимых процедур. Язык хранимых сервера FireBird представляет собой структурный алгоритмический язык и его синтаксис имеет много общего с синтаксис Pascal, кроме того язык ХП имеет ряд возможностей языка SQL. В языке ХП включены инструкции:

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

По числу строк возвращаемых в качестве результата, можно выделить следующие виды:

1) процедура выбора – возвращает много строк

2) действия – возвращает одну строку

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

ХП Выбора – наоборот – возвращает набор данных, состоящие в общем случае из нескольких записей. Также будут содержать SQL запросы и команды Select.

Физическая организация баз данных InterBase\Firebird (организация многопользовательского режима).

1) База данных в InterBase\Firebird состоят из последовательных, начиная с 0, пронумерованных страниц. 0 страница является служебной и содержит ин-ю, необходимую для соединения с БД. Размер страницы устанавливается при создании БД. Он может быть изменен при сохранении и восстановлении БД. Одна страница считается сервером за один логический доступ к БД.

2) В interbase\firebird поддерживается многоверсионная структура записей. При изменении записи какой-либо транзакции, создается новая версия записи, куда по мимо данных записывается номер транзакции и указатель на предыдущую версию записи. Старая версия помечается как измененная. Каждая стартующая транзакции работает с последней версии записи, изменения для которой подтверждены. Таким образом параллельно работающая с БД транзакция всегда использует разные версии записей, что позволяет снимать блокировки для клиентских приложений, одновременно работающие с одними и теми же данными. При удалении записи она также физически не удаляется из записи, а помечается как удаленное до тех пор, пока не завершена активная транзакция, использующая эту запись.

3) Interbase\firebird располагает на одной странице БД версии одной записи таблицы БД. После удаления записей, на странице образуются фрагменты (дыры). При добавлении новой записи, анализируется размер мах фрагмента, если он меньше длины добавляемой записи, то происходит компрессия, в процессе которой фрагменты объединяются. Если освободившегося места не хватает для новой записи, то добавляется запись с новой страницы. Загрузка страницы считается нормальной, в случае если фрагменты занимают не более 20 % объема страницы.

4) Выделение страниц никак не оптимизировано. На отдельной странице хранятся номера всех отдельных страниц. При выделении страниц не предпринимается никаких действий по выделению непрерывных страниц для хранения записей таблицы БД, а выделяется первая страница из списка свободных. Если свободной страницы нет, добавляется новая в конец БД, только в этом случае размер БД возрастает.

5) Многоверсионная структура записей и неоптимальной веделение страниц ведет к высокой фрагментации БД и как следствие, к медленной работе с ней. Поэтому необходимо производить дефрагментацию БД. Дефрагментация БД характеризуется к расположениям таблиц БД на непрерывных страницах и отсутствием мусора – фрагментов. Под мусором принимаются версии записей, с которыми не работает никакая активная транзакции.

6) Для удаления фрагментов и мусора в БД существует 2 метода:

1.Создание резервной копии и восстановление – данный процесс гарантирует удаление всего мусора и фрагментов, т.к. в момент сохранения и восстановления БД не должно быть активных транзакций.

2. Автоматическое удаление фрагментов или мусора.

Firebird\Interbase предусмотрено автоматическое удаления на фоне активных транзакций. Интервал, через который происходит удаление – 20 000 транзакций. При автоматической отчистке удаляются только те версии записей, для которых не активных транзакций. В результате могут быть удалены не все старые версии.


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



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