Основных структур памяти на сервере Oracle три: глобальная область системы (SGA, или System Global Area), глобальная область процесса (PGA, или Process Global Area) и глобальная область пользователя (UGA, или User Global Area). Рассмотрим более подробно SGA, так как это наиболее важная область памяти, к которой обращаются все процессы Oracle.
В ОС UNIX область SGA реализована как сегмент разделяемой памяти – отдельный фрагмент памяти, к которому могут подключаться процессы. В ОС Windows экземпляр Oracle – это единый процесс с одним адресным пространством и область SGA выделяется как приватная память процесса ORACLE.EXE.
Область SGA разбита на несколько пулов, знания о которых нам пригодятся в дальнейшем, – это Java-pool, shared-pool, large-pool и null-pool.
- Java-пул (Java-pool) представляет собой фиксированный пул памяти, выделенный виртуальной машине JVM для запуска Java-процедур. В случае если на Java-пул выделено недостаточно памяти, мы не сможем выполнять Java-процедуры (об этом будет рассказано позже).
- Разделяемый пул (shared-pool). В разделяемом пуле сервер Oracle кеширует различные результаты разбора запроса, в которых присутствуют разделяемые курсоры, хранимые процедуры, объекты состояния и пр. Перед повторным разбором запроса сервер Oracle просматривает разделяемый пул в поисках готового результата.
- Большой пул (large-pool). Большой пул назван так потому, что используется для выделения фрагментов памяти больших объемов, чем те, для управления которыми создавался разделяемый пул.
- Неопределенный пул (null-pool). Сюда относится память, выделенная под буферы блоков, буфер журнала повторного выполнения и под «фиксированную область SGA».
Значения размера пулов определяются в файле init.ora такими параметрами, как: JAVA_POOL_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, DB_BLOCK_BUFFERS и пр. Вот вкратце основная информация о структурах памяти СУБД Oracle, которая понадобится для понимания материала.
На заметку: область SGA хранит в себе множество важных данных, с которыми напрямую работает СУБД. В случае возможности модификации данных в SGA можно реализовать руткит, обнаружить который будет достаточно сложно.