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, но имеют принципиальные различия:
| Характеристика | PGA | SGA |
|---|---|---|
| Доступность | Частная для каждого процесса | Общая для всех процессов и сеансов |
| Содержимое | Данные сеанса, 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 →