Автоматическое управление памятью базы данных Oracle

как автоматически управлять памятью базы данных OracleНастройка системной глобальной области (SGA), которая представляет собой память, выделяемую Oracle каждому экземпляру для хранения данных и управляющей информации, не всегда осуществляется легко. Вы можете столкнуться с ситуацией, когда транзакции OLTP доминируют в базе данных в течение дня, а затем — ночью — запускаются трудоемкие пакетные задания. В таком случае понадобится выделить больше памяти буферному кэшу в течение дня, и увеличить компонент большого пула (large pool) SGA для выполнения ночных пакетных заданий.

Разумеется, можно динамически изменять некоторые компоненты SGA, а также использовать сценарии для изменения выделений SGA перед и после выполнения пакетных заданий, но факт остается фактом — вы непосредственно отвечаете за настройку компонентов SGA в соответствии с текущими нуждами экземпляра. Проблемы вроде ORA-4031 (“out of shared pool memory” — нехватка памяти в разделяемом пуле) возникают достаточно часто, когда вы вручную настраиваете различные параметры. Если вы перестрахуетесь и выделите для SGA много памяти, то рискуете впустую потратить важнейшие ресурсы и тем самым вызвать излишний страничный обмен и прочие проблемы, которые плохо повлияют на производительность базы данных.

В Oracle Database 11g и 12c можно полностью автоматизировать сложную задачу управления памятью. Это одно из наиболее существенных усовершенствований Oracle Database 11g, и важный вклад в достижении цели Oracle — автоматического управления базой данных. При автоматическом управлении памятью Oracle автоматически выделяет и освобождает память как для SGA, так и PGA, на основе меняющейся рабочей нагрузки базы данных. Oracle использует внутренние представления и статистику, чтобы выбрать наилучший способ распределения памяти между компонентами SGA.

Автоматическое управление памятью дает следующие преимущества.

  • Сокращает шансы исчерпания памяти разделяемого пула.
  • Оптимально использует доступную память.
  • Повышает производительность базы данных, постоянно сверяя распределение памяти с потребностями экземпляра в памяти.

Тем не менее, при желании можно продолжать вручную управлять компонентами разделяемой памяти Oracle Database 11g.

 

Различные типы управления памятью

Oracle предлагает несколько методов управления памятью, которые перечислены ниже.

  • Автоматическое управление памятью. Эта новая опция в Oracle Database 11g и 12c позволяет базе данных полностью автоматически управлять компонентами SGA и PGA.
  • Автоматическое управление разделяемой памятью. Этот вариант автоматизирует управление SGA, но не PGA.
  • Автоматическое управление памятью PGA. Эта опция автоматизирует только управление памятью PGA.
  • Ручное управление разделяемой памятью. Вы устанавливаете размеры индивидуальных компонентов SGA, такие как разделяемый пул и буферный кэш.
  • Ручное управление памятью PGA. Вы вручную настраиваете память PGA.

В Oracle рекомендуют использовать автоматическое управление памятью, при котором база данных динамически подстраивает уровни индивидуальных компонентов SGA наряду с выделениями PGA.

База данных перераспределяет память от SGA к PGA и обратно, в зависимости от текущих потребностей. Ваша задача — установить начальный объем памяти, которую хотите выделить базе данных, и затем позволить базе самой выполнять повседневное управление памятью.


На заметку! На текущий момент операционные системы Linux, Solaris, Windows, HP-UX и AIX поддерживали автоматическое управление памятью.


 

Включение автоматического управления памятью

Включить автоматическое управление памятью можно при создании базы данных с использованием DBCA (Database Configuration Assistant — помощник по конфигурированию баз данных). DBCA предлагает выбор автоматического управления памятью наряду с другими типами управления памятью. Установить инициализационные параметры, контролирующие автоматическое управление памятью, можно на вкладке Memory (Память) страницы Initialization Parameters (Параметры инициализации). Выберите автоматическое управление памятью, отметив флажок Use Automatic Memory Management (Использовать автоматическое управление памятью) в разделе Typical (Типовое).

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

Прежде чем можно будет выделить соответствующий объем памяти, который нужно назначить базе данных, находящейся под автоматическим управлением памятью, сначала следует определить, сколько памяти в данный момент использует база данных в SGA и PGA. Ваша цель — выделить объем памяти, который примерно равен сумме объемов SGA и PGA, потребляемых базой данных в конкретный момент. Однако это не значит, что для оценки общей потребности базы данных в памяти вы должны просто сложить значения параметров SGA_TARGET и PGA_TARGET. Дело в том, что в отличие от случая с параметром SGA_TARGET, база данных не может немедленно использовать память, которая указана в параметре PGA_TARGET. База данных лишь основывает свое выделение PGA для каждого сеанса на параметре PGA_TARGET. Таким образом, параметру PGA_TARGET можно назначить очень большое значение, но база будет использовать только малую часть этой величины в каждый заданный момент времени.

Чтобы включить автоматическое управление памятью в существующей базе данных, выполните перечисленные ниже простые шаги.

1. Определите текущее значение размера SGA, выполнив следующую команду: 

SQL> SHOW PARAMETER SGA_TARGET
NAME         TYPE          VALUE
-----------  ------------  ------
sga_target   big integer   600M
SQL>

Для получения текущего размера SGA можно также опросить представление V$SGA_STAT (SELECT SUM(BYTES) FROM V$SGA_STAT).

2. Определите максимальное выделение PGA в любой заданный момент времени, применив следующий запрос:

SQL> SELECT VALUE FROM V$PGASTAT
2 WHERE name='maximum PGA allocated';
VALUE
---------
581000192
SQL> 

3. Запрос показывает, что база данных выделила максимум примерно 580 Мбайт памяти области PGA. Однако следующий запрос дает неверную оценку PGA:

SQL> SHOW PARAMETER PGA_AGGREGATE_TARGET
NAME                  TYPE             VALUE
--------------------  ---------------  ----------
pga_aggregate_target  big integer      5000000000
SQL> 

Памяти PGA было выделено около 6 Гбайт, но база данных использует из них максимум 580 Мбайт одновременно. Таким образом, добавление параметров SGA_TARGET и PGA_AGGREGATE_TARGET, скорее всего, даст сильно завышенную оценку памяти, которую необходимо назначить базе данных для автоматического выделения SGA и PGA.

4. Выберите значение параметра MEMORY_TARGET, сложив значение параметра SGA_TARGET и значение максимального выделенного размера PGA с момента запуска экземпляра. В нашем примере это будет 600 Мбайт (SGA) + 581 Мбайт (максимальный уровень использования PGA в базе данных). То есть для использования автоматического управления памятью в базе данных понадобится около 1200 Мбайт.

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

После выбора необходимых значений внесите соответствующие изменения в SPFILE, как показано ниже:

SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET=1200M SCOPE=SPFILE;
SQL> ALTER SYSTEM SET MEMORY_TARGET=2000M SCOPE=SPFILE;
SQL> ALTER SYSTEM SET SGA_TARGET=O SCOPE=SPFILE;
SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;

Установив параметры SGA_TARGET и PGA_AGGREGATE_TARGET в ноль, вы передаете базе полный контроль над управлением значениями объема SGA и PGA в зависимости от текущей рабочей нагрузки базы данных.


На заметку! Включить автоматическое управление памятью можно также с использованием диспетчера Enterprise Manager. Перейдите на домашнюю страницу и выберите ServerMemory Advisors (СерверСоветники по памяти). Щелкните на кнопке Enable (Включить) на странице Memory Advisor (Советник по памяти), чтобы включить автоматическое управление памятью.


как включить автоматическое управление памятью в СУБД Oracle

 

Настройка автоматического управления памятью

Представление V$MEMORY_DYNAMIC_COMPONENTS служит для проверки текущих размеров компонентов памяти, таких как SGA и PGA. Совет по настройке для установки параметра MEMORY_TARGET можно получить из представления V$MEMORY_TARGET_ADVICE, как показано в следующем примере: 

SQL> SELECT * FROM v$memory_target_advice ORDER BY memory_size;
MEMORY_SIZE  MEMORY_SIZE_FACTOR  ESTD_DB_TIME  ESTD_DB_TIME_FACTOR     VERSION
-----------  ------------------  ------------  -------------------  ----------
        410         .5           34994                      1.0085           0
        615         .75          34699                           1           0
        820         1            34699                           1           0
       1025         1.25         34699                           1           0
       1230         1.5          34699                           1           0
       1435         1.75         34699                           1           0
       1640         2            34699                           1           0
7 rows selected.
SQL>

Строка, где значение MEMORY_SIZE_FACTOR равно 1, показывает текущее выделение памяти экземпляру, осуществленное установкой параметра MEMORY_TARGET. Значения всех столбцов соответствует альтернативным гипотетическим уровням параметра MEMORY_TARGET. В нашем примере не будет преимуществ от увеличения значения параметра MEMORY_TARGET сверх его текущего значения в 615 Мбайт, основанного на текущей рабочей нагрузке базы данных.

 

Автоматическая зависимость параметров памяти

Однажды установив параметр MEMORY_TARGET, база данных выделит память компонентам SGA и PGA на основе потребностей рабочей нагрузки. Параметр MEMORY_TARGET динамический, и потому его легко изменить во время работы базы данных. Параметры SGA_TARGET и/или PGA_AGGREGATE_TARGET можно установить даже после включения автоматического выделения памяти в базе данных установкой параметра MEMORY_TARGET.

Если вы игнорируете параметр MEMORY_MAX_TARGET, но устанавливаете параметр MEMORY_TARGET, то значение первого устанавливается по умолчанию равным значению второго. Если же, с другой стороны, просто установить параметр MEMORY_MAX_TARGET, то значение параметра MEMORY_TARGET будет по умолчанию равно нулю, что означает отключение автоматического управления памятью.

Ниже показаны отношения между этими различными параметрами размеров памяти при установке параметра MEMORY_TARGET.

  • Если вы не устанавливаете параметры SGA_TARGET и PGA_AGGREGATE_TARGET, то база данных автоматически настроит их, не устанавливая минимальных значений для SGA или PGA.
  • Если вы установите параметры SGA_TARGET и PGA_AGGREGATE_TARGET, они трактуются как минимальные значения для SGA и PGA.
  • Если вы установите только параметр SGA_TARGET, но не PGA_AGGREGATE_TARGET, то все равно сможете автоматически настраивать и SGA, и PGA.
  • Если вы установите только параметр PGA_AGGREGATE_TARGET, база данных автоматически настроит и SGA, и PGA.

Если не установить параметр MEMORY_TARGET, он по умолчанию примет значение ноль, и следующие утверждения будут истинны относительно распределения памяти SGA и PGA.

  • Если вы не установите ни SGA_TARGET, ни PGA_AGGREGATE_TARGET, то база данных не станет автоматически настраивать SGA, а это значит, что вам придется самостоятельно установить размеры индивидуальных компонентов SGA. Однако база данных будет автоматически настраивать PGA.
  • Если вы установите только параметр SGA_TARGET, то база данных автоматически настроит подкомпоненты SGA.
  • База данных всегда автоматически настроит PGA, независимо от того, установите вы параметр PGA_AGGREGATE_TARGET или нет.

Вас заинтересует / Intresting for you:

Видеокурс по администрированию...
Видеокурс по администрированию... 10462 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 5653 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Обновление до Oracle Database ...
Обновление до Oracle Database ... 5491 просмотров Илья Дергунов Tue, 21 Nov 2017, 13:18:05
Создание базы данных Oracle
Создание базы данных Oracle 18710 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Войдите чтобы комментировать