Открыть сервис

System Global Area

System Global Area (SGA, Системная глобальная область) — это область разделяемой памяти сервера базы данных Oracle, которая содержит данные и управляющую информацию для одного экземпляра (instance) базы данных. SGA представляет собой ключевой компонент архитектуры Oracle Database, обеспечивающий быстрый доступ к данным и кэширование, что критически важно для производительности системы. Вся память SGA выделяется при запуске экземпляра базы данных и освобождается при его остановке; она доступна всем фоновым процессам и серверным процессам, обслуживающим пользовательские сессии.

Назначение и роль

Основная функция SGA — минимизировать количество операций ввода-вывода (I/O) на диск за счёт хранения часто используемых данных в оперативной памяти. Это достигается за счёт кэширования блоков данных, SQL-запросов и их планов выполнения, а также управляющей информации. SGA является обязательным компонентом экземпляра Oracle: без неё база данных не может быть запущена. Размер SGA динамически или статически настраивается администратором базы данных (DBA) и напрямую влияет на производительность, масштабируемость и стабильность работы системы.

Структура SGA

SGA состоит из нескольких основных компонентов, каждый из которых выполняет определённые функции. В зависимости от версии Oracle Database (начиная с Oracle 9i и далее) состав и управление этими компонентами могут различаться.

Буферный кэш базы данных (Database Buffer Cache)

Буферный кэш — это область памяти, в которой хранятся копии блоков данных, считанных с диска. Когда пользователь выполняет запрос на чтение или изменение данных, Oracle сначала проверяет, есть ли нужный блок в буферном кэше. Если блок найден (cache hit), операция выполняется без обращения к диску. Если блок отсутствует (cache miss), он считывается с диска в кэш. Эффективность кэша измеряется коэффициентом попадания (cache hit ratio), который должен быть как можно ближе к 100 %. Буферный кэш управляется алгоритмом LRU (Least Recently Used) — редко используемые блоки вытесняются для освобождения места под новые.

Кэш разделяемого пула (Shared Pool)

Разделяемый пул содержит несколько подкомпонентов, хранящих метаданные и исполняемый код:

  • Библиотечный кэш (Library Cache) — хранит разобранные (parsed) SQL- и PL/SQL-операторы, их планы выполнения, а также информацию о хранимых процедурах и функциях. Это позволяет повторно использовать планы запросов без повторного разбора, что значительно ускоряет выполнение однотипных запросов.
  • Кэш словаря данных (Data Dictionary Cache) — хранит метаданные об объектах базы данных (таблицы, индексы, пользователи, привилегии). Поскольку словарь данных часто запрашивается при разборе SQL, его кэширование ускоряет эту операцию.
  • Результатный кэш (Result Cache) — появился в Oracle 11g, позволяет кэшировать результаты выполнения SQL-запросов и PL/SQL-функций. При повторном выполнении того же запроса Oracle возвращает кэшированный результат, если данные не изменились.

Кэш журнала повторного выполнения (Redo Log Buffer)

Это небольшая область памяти, в которой временно хранятся записи о всех изменениях данных (redo entries). Эти записи используются для восстановления базы данных после сбоя. Содержимое кэша периодически сбрасывается на диск в файлы журнала повторного выполнения (online redo log files). Размер кэша обычно невелик (от нескольких мегабайт до десятков мегабайт), так как его основная задача — быстро накапливать изменения до записи на диск.

Большой пул (Large Pool)

Необязательная область памяти, используемая для операций, требующих больших объёмов памяти, таких как резервное копирование и восстановление (RMAN), параллельное выполнение запросов, а также для серверных процессов, работающих с пулом соединений (Shared Server). Выделение памяти из большого пула снижает нагрузку на разделяемый пул.

Java-пул (Java Pool)

Область памяти, выделяемая для поддержки выполнения Java-кода внутри базы данных Oracle (Oracle JVM). Используется для хранения Java-объектов, классов и методов.

Потоковый пул (Streams Pool)

Используется для поддержки технологии Oracle Streams (репликация данных, очереди сообщений). В современных версиях Oracle (начиная с 12c) этот пул может быть заменён на другие механизмы, такие как Oracle GoldenGate.

Фиксированная область SGA (Fixed SGA)

Небольшая область памяти, которая содержит внутренние структуры управления, такие как информация об экземпляре, адреса блоков, блокировки и другие служебные данные. Размер фиксированной SGA обычно не превышает нескольких мегабайт и не изменяется динамически.

Управление памятью SGA

Oracle предоставляет несколько подходов к управлению памятью SGA:

  • Ручное управление — администратор вручную задаёт размеры каждого компонента SGA с помощью параметров инициализации (например, DB_CACHE_SIZE, SHARED_POOL_SIZE). Требует глубокого понимания нагрузки и ручной настройки.
  • Автоматическое управление разделяемой памятью (ASMM) — начиная с Oracle 10g, позволяет задать общий размер SGA (SGA_TARGET), а Oracle автоматически распределяет память между компонентами в зависимости от текущей нагрузки. Это упрощает администрирование, но требует правильной настройки SGA_TARGET.
  • Автоматическое управление памятью (AMM) — начиная с Oracle 11g, позволяет задать общий размер памяти экземпляра (MEMORY_TARGET), который включает как SGA, так и PGA (Program Global Area). Oracle автоматически перераспределяет память между SGA и PGA в зависимости от потребностей. Это наиболее гибкий, но и наиболее ресурсоёмкий подход.

Мониторинг и настройка

Для мониторинга состояния SGA используются динамические представления (V$ views), такие как V$SGA, V$SGASTAT, V$BUFFER_POOL_STATISTICS, V$SHARED_POOL_ADVICE. Администраторы анализируют такие показатели, как:

  • Коэффициент попадания в буферный кэш (cache hit ratio).
  • Коэффициент попадания в библиотечный кэш (library cache hit ratio).
  • Количество свободных буферов в буферном кэше.
  • Использование разделяемого пула и наличие фрагментации.

Настройка SGA заключается в подборе оптимальных размеров компонентов для минимизации дискового ввода-вывода и снижения задержек. Избыточный размер SGA может привести к нехватке памяти для операционной системы и других процессов, а недостаточный — к снижению производительности из-за частых обращений к диску.

Особенности в разных версиях Oracle

  • Oracle 8i и ранее — SGA имела фиксированный размер, задаваемый при запуске экземпляра. Изменение размера требовало перезапуска базы данных.
  • Oracle 9i — введена поддержка динамического изменения размеров компонентов SGA (например, DB_CACHE_SIZE можно изменить без перезапуска).
  • Oracle 10g — появилось автоматическое управление разделяемой памятью (ASMM) через параметр SGA_TARGET.
  • Oracle 11g — введено автоматическое управление памятью (AMM) через параметр MEMORY_TARGET, а также результатный кэш.
  • Oracle 12c и новее — добавлены новые возможности, такие как In-Memory Column Store (IM column store), который может использоваться как часть SGA для ускорения аналитических запросов. В версии 12c также появилась возможность автоматического управления памятью для многопользовательских контейнерных баз данных (CDB).

Критика и ограничения

Несмотря на ключевую роль SGA, существуют некоторые ограничения и критические замечания:

  • Сложность настройки — ручное управление SGA требует высокой квалификации администратора. Неправильная настройка может привести к неэффективному использованию памяти или к проблемам с производительностью.
  • Фрагментация разделяемого пула — при интенсивной работе с динамическими SQL-запросами может возникать фрагментация библиотечного кэша, что снижает эффективность кэширования.
  • Ограничения по размеру — SGA ограничена объёмом доступной оперативной памяти на сервере. В крупных системах с большими объёмами данных может потребоваться значительная память, что увеличивает стоимость оборудования.
  • Зависимость от версии — поведение и возможности SGA меняются от версии к версии, что требует от администратора постоянного обучения и адаптации.

Источники

  • Oracle Database Concepts Guide (Oracle Corporation)
  • Oracle Database Administrator’s Guide (Oracle Corporation)
  • Oracle Database Performance Tuning Guide (Oracle Corporation)
  • Документация Oracle 10g, 11g, 12c, 19c (официальные руководства)
  • Книга «Oracle Database 12c: The Complete Reference» (Bob Bryla, Kevin Loney)
  • Книга «Oracle Performance Tuning» (Guy Harrison)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →