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 →