Продолжаем рассматривать Oracle SGA, первая статью относительно SGA можно посмотреть здесь.
- SGA - динамическая область размер которой может быть увеличен до sga_max_size.
- Память для компонентов SGA выделяется и отслеживается с помощью гранул.
Гранулы - это непрерывные области виртуальной памяти, их размер устанавливается на основе SGA_MAX_SIZE.
Единицы выделения памяти
Гранула (granule) - это выделяемый участок непрерывной области виртуальной памяти. Размер гранулы зависит от предполагаемого общего размера SGA, оценить который можно на основе значения параметра SGA_MAX_SIZE. Размер гранулы составляет:
- 4 MB, если предполагаемый размер SGA < 128 MB
- 16 MB, в противном случае.
Компоненты SGA (кэш буферов базы данных, разделяемый пул и большой пул) могут быть увеличены и уменьшены в своем размере гранулами. В представлении V$BUFFER_POOL для каждого пула буферов отслеживаются количество выделенных гранул и текущие операции (например, выделение или освобождение гранул по команде ALTER SYSTEM, соответствующая самонастройка). При старте сервер Oracle создает записи о каждой выделенной грануле в адресном пространстве, ограниченном параметром SGA_MAX_SIZE. В ходе запуска сервера каждый компонент получает требуемое число гранул.
Минимальная конфигурация SGA должна содержать три гранулы: гранула для кэша буферов базы данных; гранула для разделяемого пула и гранула для остальных структур SGA: журнального буфера и фиксированной части SGA (строки "fixed size" и "redo buffers" в представлении V$SGA).