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

PGA_AGGREGATE_TARGET

PGA_AGGREGATE_TARGET — это параметр конфигурации системы управления базами данных Oracle Database, определяющий целевой общий объем оперативной памяти (в байтах), выделяемой для всех серверных процессов, работающих в экземпляре базы данных, в области PGA (Program Global Area). Параметр используется для автоматического управления памятью в PGA, позволяя СУБД динамически распределять память между различными процессами и их рабочими областями (SQL-рабочими областями, памятью для сортировок, хэш-соединений и т.д.) в зависимости от текущей нагрузки.

Назначение и принцип работы

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

Параметр PGA_AGGREGATE_TARGET был введен в Oracle Database 9i (Release 1) как часть механизма автоматического управления памятью (Automatic PGA Memory Management). При установке этого параметра в значение больше 0 (и при отключенном ручном управлении памятью через параметры SORT_AREA_SIZE, HASH_AREA_SIZE и т.п.) Oracle автоматически распределяет доступную память между всеми активными процессами. Цель — поддерживать суммарное потребление PGA всеми процессами в пределах заданного значения, при этом стараясь оптимально использовать память для повышения производительности запросов.

Механизм работы

Oracle использует алгоритм, основанный на статистике и прогнозировании нагрузки. СУБД отслеживает текущее потребление PGA каждым процессом, количество активных процессов, их потребности в памяти для рабочих областей, а также историю использования. На основе этих данных система динамически корректирует лимиты памяти для каждого процесса (через параметры _pga_max_size и _smm_max_size), стараясь не превысить общий целевой объем.

Если суммарное потребление PGA приближается к значению PGA_AGGREGATE_TARGET, система может:

  • Снизить лимиты памяти для новых процессов или процессов с низким приоритетом.
  • Переключить часть операций на использование дискового пространства (например, сортировка на диске вместо сортировки в памяти).
  • Уменьшить размер рабочих областей для некоторых запросов, что может привести к снижению производительности, но предотвращает исчерпание памяти.

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

Классификация и связанные параметры

Параметр PGA_AGGREGATE_TARGET относится к категории параметров автоматического управления памятью. Он тесно связан с другими параметрами Oracle:

  • PGA_AGGREGATE_LIMIT — жесткий лимит на общий объем PGA, который не может быть превышен (введен в Oracle 12c). Если потребление PGA достигает этого значения, Oracle принудительно завершает процессы, потребляющие больше всего памяти, или прерывает их операции. Значение по умолчанию — 2 ГБ или 200% от PGA_AGGREGATE_TARGET, в зависимости от того, что больше.
  • SGA_TARGET и MEMORY_TARGET — параметры автоматического управления SGA и всей памятью экземпляра (SGA + PGA) соответственно. При использовании MEMORY_TARGET значение PGA_AGGREGATE_TARGET может динамически изменяться Oracle.
  • WORKAREA_SIZE_POLICY — параметр, определяющий, используется ли автоматическое управление памятью для рабочих областей (AUTO) или ручное (MANUAL). Для работы PGA_AGGREGATE_TARGET должен быть установлен в AUTO (по умолчанию).
  • _pga_max_size — внутренний параметр (не рекомендуется для изменения вручную), задающий максимальный размер PGA для одного процесса. Oracle автоматически устанавливает его на основе PGA_AGGREGATE_TARGET и количества активных процессов.

Настройка и рекомендации

Значение PGA_AGGREGATE_TARGET задается в файле параметров инициализации (init.ora или spfile) или может быть изменено динамически с помощью команды ALTER SYSTEM SET PGA_AGGREGATE_TARGET = <значение>;. Единица измерения — байты, но можно использовать суффиксы K, M, G (например, PGA_AGGREGATE_TARGET = 2G).

Рекомендации по выбору значения

  • Для OLTP-систем (Online Transaction Processing): нагрузка характеризуется большим количеством коротких транзакций, каждая из которых потребляет относительно мало PGA. Рекомендуется устанавливать PGA_AGGREGATE_TARGET в размере 20-30% от общего объема оперативной памяти сервера, выделенной для базы данных.
  • Для DSS-систем (Decision Support Systems) и хранилищ данных: нагрузка включает сложные аналитические запросы, требующие больших рабочих областей для сортировок, хэш-соединений и группировок. Рекомендуется устанавливать PGA_AGGREGATE_TARGET в размере 50-70% от общего объема памяти для базы данных.
  • Для смешанных нагрузок: оптимальное значение обычно находится в диапазоне 40-50% от памяти, выделенной для экземпляра.

Мониторинг

Для оценки эффективности использования PGA и корректности настройки PGA_AGGREGATE_TARGET используются следующие представления и утилиты:

  • V$PGASTAT — содержит статистику использования PGA, включая текущее потребление, количество выделенной памяти, количество операций, выполненных в памяти и на диске, и т.д.
  • V$PROCESS — показывает размер PGA для каждого процесса.
  • V$SQL_WORKAREA — детальная информация о рабочих областях для каждого SQL-запроса.
  • V$PGA_TARGET_ADVICE — предоставляет рекомендации по оптимальному значению PGA_AGGREGATE_TARGET на основе исторических данных.
  • Enterprise Managerграфический интерфейс для мониторинга и настройки памяти.

Ключевые метрики

  • PGA memory allocated — текущий объем выделенной PGA.
  • PGA memory used — объем PGA, фактически используемый для данных.
  • PGA memory freed — объем PGA, освобожденный после завершения операций.
  • total PGA allocated — суммарный объем PGA, выделенный с момента запуска экземпляра.
  • over allocation count — количество случаев, когда Oracle был вынужден превысить целевое значение PGA_AGGREGATE_TARGET (обычно из-за пиковой нагрузки).
  • cache hit percentage — процент операций, выполненных полностью в памяти (без использования диска). Высокое значение (более 90%) свидетельствует об эффективном использовании PGA.

Примеры использования

В типичной OLTP-системе с 16 ГБ оперативной памяти, выделенной для базы данных, PGA_AGGREGATE_TARGET может быть установлен в 4 ГБ (25%). При этом Oracle будет автоматически распределять память между сотнями одновременных сеансов, каждый из которых выполняет короткие запросы.

В хранилище данных с 64 ГБ памяти для базы данных значение может быть установлено в 40 ГБ (62.5%). Это позволит выполнять сложные запросы с сортировкой миллионов строк в памяти, избегая операций на диске.

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

Несмотря на автоматизацию, параметр PGA_AGGREGATE_TARGET не является панацеей. Основные ограничения:

  • Неэффективность при неравномерной нагрузке: если один процесс требует значительно больше PGA, чем остальные, он может исчерпать лимит, заставив другие процессы использовать диск. Это может привести к снижению производительности.
  • Сложность прогнозирования: точное значение PGA_AGGREGATE_TARGET трудно определить без исторических данных о нагрузке. Рекомендуется использовать V$PGA_TARGET_ADVICE для подбора оптимального значения.
  • Взаимодействие с SGA: при использовании автоматического управления всей памятью (MEMORY_TARGET) значения PGA_AGGREGATE_TARGET и SGA_TARGET могут динамически перераспределяться, что иногда приводит к неоптимальному распределению.
  • Ограничение на количество процессов: при очень большом количестве одновременных сеансов (например, тысячи) даже при правильно установленном PGA_AGGREGATE_TARGET может возникнуть нехватка памяти для каждого процесса, что приведет к частым операциям на диске.

Источники

  • Oracle Database Administrator's Guide, 19c — Chapter 8: Managing Memory
  • Oracle Database Performance Tuning Guide, 19c — Chapter 7: Tuning the Program Global Area (PGA)
  • Oracle Database Reference, 19c — Parameter PGA_AGGREGATE_TARGET
  • Документация Oracle Corporation по автоматическому управлению памятью (Automatic PGA Memory Management)

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

На главную BFOmetr →