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

Program Global Area

Program Global Area (PGA) — это область памяти, выделяемая серверным процессом базы данных Oracle для выполнения операций, связанных с конкретным пользовательским сеансом или фоновым процессом. В отличие от System Global Area (SGA), которая является общей для всех процессов и сеансов, PGA является частной (private) для каждого серверного или фонового процесса. PGA управляется автоматически и содержит данные, необходимые для обработки SQL-запросов, сортировки, хэширования, объединения данных и других операций, выполняемых в рамках одного сеанса.

Структура и компоненты PGA

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

Private SQL Area

Private SQL Area — это область памяти, выделяемая для каждого выполненного SQL-запроса в рамках сеанса. Она содержит данные, специфичные для конкретного выполнения запроса, такие как:

  • Bind variables (связанные переменные) — значения, подставляемые в SQL-запрос во время выполнения.
  • Query execution plan (план выполнения запроса) — информация о том, как Oracle будет обрабатывать запрос.
  • Cursor state (состояние курсора) — информация о текущем положении в наборе результатов.

Private SQL Area делится на два типа:

  • Persistent area — сохраняется на протяжении всего времени существования курсора (открытия до закрытия).
  • Runtime area — создаётся на время выполнения запроса и освобождается после его завершения.

SQL Work Areas

SQL Work Areas — это динамически выделяемые области памяти, используемые для выполнения операций, требующих значительных вычислительных ресурсов, таких как:

  • Sort operations (сортировка) — при выполнении операций ORDER BY, GROUP BY, DISTINCT или создания индексов.
  • Hash joins (хэш-соединения) — при объединении таблиц с помощью хэш-алгоритмов.
  • Bitmap operations (битовые операции) — при работе с битовыми индексами.
  • Merge joins (слияние) — при объединении отсортированных наборов данных.

Размер SQL Work Area может быть фиксированным или автоматически регулироваться в зависимости от доступной памяти и настроек PGA.

Session Memory

Session Memory — это область памяти, выделяемая для хранения данных, связанных с конкретным сеансом, таких как:

  • Session variables (переменные сеанса) — значения, установленные с помощью команд ALTER SESSION.
  • Session state (состояние сеанса) — информация о текущих настройках, правах доступа и контексте выполнения.
  • PL/SQL context (контекст PL/SQL) — данные, используемые при выполнении процедур, функций и пакетов PL/SQL.

Управление PGA

Управление памятью PGA в Oracle может осуществляться двумя способами: автоматическим и ручным. В современных версиях Oracle (начиная с Oracle 9i) рекомендуется использовать автоматическое управление.

Автоматическое управление PGA (Automatic PGA Management)

При автоматическом управлении Oracle самостоятельно определяет размер PGA для каждого процесса, основываясь на общем объёме памяти, выделенной для PGA, и текущей нагрузке. Для этого используется параметр PGA_AGGREGATE_TARGET, который задаёт целевой общий объём памяти для всех PGA в системе. Oracle динамически распределяет эту память между процессами, оптимизируя производительность.

  • PGA_AGGREGATE_TARGET — задаёт целевой объём памяти для PGA. Если этот параметр установлен, Oracle автоматически управляет размером SQL Work Areas и других компонентов PGA.
  • PGA_AGGREGATE_LIMIT — задаёт максимальный объём памяти, который может быть выделен для всех PGA. Если этот лимит превышен, Oracle может принудительно завершать сеансы или процессы, чтобы освободить память.

Ручное управление PGA

При ручном управлении администратор базы данных задаёт фиксированные размеры для отдельных компонентов PGA с помощью параметров:

  • SORT_AREA_SIZE — размер области для сортировки.
  • HASH_AREA_SIZE — размер области для хэш-соединений.
  • BITMAP_MERGE_AREA_SIZE — размер области для слияния битовых индексов.

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

Влияние PGA на производительность

PGA играет ключевую роль в производительности базы данных Oracle, особенно при выполнении сложных запросов, требующих сортировки, хэширования или объединения больших объёмов данных. Недостаточный размер PGA может привести к:

  • Использованию временных табличных пространств (temporary tablespace) — если памяти недостаточно для выполнения операций, Oracle начинает использовать диск, что значительно замедляет выполнение запросов.
  • Увеличению времени отклика — из-за дополнительных операций ввода-вывода.
  • Ошибкам — в некоторых случаях, если память исчерпана, запросы могут завершаться с ошибками, такими как ORA-04030 (out of process memory).

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

Мониторинг PGA

Для мониторинга использования PGA в Oracle используются различные представления и утилиты:

  • V$PGASTAT — содержит статистику по использованию PGA, включая общий объём выделенной памяти, количество операций сортировки и хэширования, а также время, затраченное на эти операции.
  • V$PROCESS — отображает информацию о каждом процессе, включая объём памяти, выделенной для PGA.
  • V$SQL_WORKAREA — показывает информацию о SQL Work Areas для каждого выполняемого запроса.
  • V$SQL_WORKAREA_HISTOGRAM — содержит гистограмму распределения размеров SQL Work Areas.
  • Automatic Workload Repository (AWR) — предоставляет отчёты о производительности PGA за определённый период.

Настройка PGA

Настройка PGA обычно включает в себя определение оптимального значения PGA_AGGREGATE_TARGET. Рекомендации по настройке:

  • Для систем, где преобладают операции сортировки и хэширования (например, хранилища данных), PGA_AGGREGATE_TARGET может составлять до 50–70% от общего объёма оперативной памяти.
  • Для систем с большим количеством транзакций (OLTP) значение обычно ниже — 20–30% от общего объёма памяти.
  • Для систем с ограниченными ресурсами (например, виртуальные машины) рекомендуется устанавливать PGA_AGGREGATE_LIMIT, чтобы избежать исчерпания памяти.

Oracle также предоставляет автоматические рекомендации по настройке PGA через утилиту DBMS_ADVISOR или через интерфейс Oracle Enterprise Manager.

Отличия PGA от SGA

PGA и SGA являются двумя основными областями памяти в Oracle Database, но имеют принципиальные различия:

ХарактеристикаPGASGA
ДоступностьЧастная для каждого процессаОбщая для всех процессов и сеансов
СодержимоеДанные сеанса, SQL Work Areas, курсорыБуферный кэш, кэш словаря данных, журналы
УправлениеАвтоматическое или ручноеАвтоматическое или ручное
ОсвобождениеПри завершении процесса или сеансаПри выключении базы данных
РазмерОбычно меньше SGAОбычно больше PGA

Применение в различных сценариях

PGA особенно важна в следующих сценариях:

  • Хранилища данных (Data Warehousing) — при выполнении сложных запросов с сортировкой, группировкой и объединением больших таблиц.
  • Отчётные системы — при генерации отчётов с агрегацией данных.
  • Системы с интенсивным использованием PL/SQL — при выполнении процедур и функций, которые создают временные структуры данных.
  • Системы с большим количеством одновременных сеансов — при большом числе пользователей, каждый из которых выполняет запросы, требующие выделения PGA.

Интересные факты

  • В Oracle 8i и более ранних версиях PGA управлялась исключительно вручную, что требовало от администраторов глубоких знаний и опыта.
  • Начиная с Oracle 9i, автоматическое управление PGA стало стандартной функцией, что значительно упростило администрирование.
  • В Oracle 12c и более поздних версиях появилась возможность использовать PGA_AGGREGATE_LIMIT для предотвращения неконтролируемого роста памяти.
  • PGA может быть выгружена на диск в случае нехватки оперативной памяти, но это существенно снижает производительность.

Источники

  • Oracle Database Concepts Guide (Oracle Corporation)
  • Oracle Database Performance Tuning Guide (Oracle Corporation)
  • Oracle Database Reference (Oracle Corporation)
  • Документация Oracle по управлению памятью (Memory Management)
  • Статьи на сайте Oracle Technology Network (OTN)

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

На главную BFOmetr →