Разделяемый пул (shared pool) — это часть SGA, где помимо всего прочего содержится р-код скомпилированных подпрограмм при их выполнении. При первом вызове хранимой подпрограммы ее р-код загружается с диска в разделяемый пул. После того как объект перестает использоваться, информация о нем может быть удалена. Для удаления объектов из разделяемого пула применяется алгоритм LRU (least recently used — использовавшийся наиболее давно). Более подробно о разделяемом пуле и его работе можно узнать в руководстве "Oracle Concepts".
Модуль DBMS_SHARED_POOL позволяет закреплять (pin) объекты в разделяемом пуле. Закрепленный объект не удалится из пула до тех пор, пока не будет выдана соответствующая команда. При этом неважно, насколько заполнен пул и как часто происходит обращение к объекту. Закрепление повышает производительность системы, так как загрузка модуля с диска занимает определенное время. Кроме того, закрепление объектов помогает снизить фрагментацию разделяемого пула. В модуле
содержатся четыре процедуры: POOL.KEEP, DBMS_SHARED_POOL.UNKEEP, DBMS_SHARED_POOL.SIZES hDBMS_SHARED_POOL.ABORTED_REO,UEST_THRESHOLD.
KEEP
Процедура используется для закрепления объектов в пуле. Можно закреплять модули, триггеры, последовательности, объектные типы и объектыДауа (в Огас1е8ги выше), SQL-операторы. KEEP определяется следующим образом:
PROCEDURE КЕЕР( name VARCHAR2, flag CHARDEFAULT 'Р');
Параметры этой процедуры описаны в таблице ниже. После того как
объект закреплен, он не будет удален из пула до остановки базы данных или до выдачи команды DBMS3HARED_POOL.UNKEEP. Заметим, что не загружает модуль в разделяемый пул немедленно, а закрепляет его при первой последующей загрузке.
UNKEEP
Процедура UNKEEP — единственное средство, позволяющее удалить объект из разделяемого пула без перезапуска базы данных. Закрепленные объекты никогда не удаляются автоматически. Определение этой процедуры выглядит следующим образом:
PROCEDURE UNKEEP( name VARCHAR2, flag CHAR DEFAULT 'Р');
Аргументы аналогичны аргументам процедуры KEEP. Если указанного объекта нет в разделяемом пуле, возвращается сообщение об ошибке.
SIZES
С помощью этой процедуры содержимое разделяемого пула выводится на экран. Определение процедуры SIZES выглядит следующим образом:
PROCEDURE SIZES( minsize NUMBER);
Возвращаются объекты, размер которых превышает значение minsize. Для вывода информации процедура SIZES использует модуль DBMSOUT-PUT, поэтому перед ее вызовом обязательно выполните команду SET SERVEROUTPUT ON в SQL*PIus или Server Manager.
ABORTED_REQUEST_THRESHOLD
Когда база данных определяет, что в разделяемом пуле не хватает памяти для удовлетворения запроса, она начинает удалять объекты, пока памяти не станет достаточно. Удаление большого числа объектов может повлиять на производительность других сеансов базы данных. Для решения этой проблемы служит ABORTED_REQUEST_THREASHOLD. Определение этой процедуры выглядит следующим образом:
PROCEDURE ABORTED_REQUEST_THRF.SITOLD( threshold, siz, NUMBER);
После вызова этой процедуры Oracle не будет запускать устаревшие объекты из пула, если им требуется больше threashold_size6a&TOB.
Итоги
В этой главе обсуждались такие именованные блоки PL/SQL, как процедуры, функции и модули. Рассказывалось о различиях между локальными и хранимыми подпрограммами, о зависимостях в хранимых подпрограммах и о вызове хранимых подпрограмм из SQL-операторов. Был описан
пакет В следующей главе рассматривается четвертый вид именованных блоков PL/SQL — триггеры.
пакет В следующей главе рассматривается четвертый вид именованных блоков PL/SQL — триггеры.
< Предыдущая |
---|