Как увеличить память выделяемую для Oracle 10g или 11g при увеличении RAM на сервере (для Windows)?
By: Date: 20.01.2014 Categories: !RUS,Admin,ORACLE,Support
ENG: How to increase the memory allocated for Oracle 10g and 11g with increasing RAM on the server (for Windows)?

ВОПРОС:

Как увеличить память выделяемую для Oracle 10g и 11g при увеличении RAM на сервере (для Windows)?

ОТВЕТ:

(Для случая использования автоматического управления памятью, ручное управление здесь не рассматривается).

В Oracle 10g и 11g автоматическое управление памятью, используемое по умолчанию, работает по разному. В расчетах, приведенных в этой статье, это учитывается.

1) (Для Oracle 10g и 11g) Определить сколько необходимо памяти под PGA на существующем экземпляре.

Для этого нужно выполнить запрос под sys.

SELECT ROUND (PGA_TARGET_FOR_ESTIMATE / 1024 / 1024) target_mb,
PGA_TARGET_FACTOR,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM V$PGA_TARGET_ADVICE;

TARGET(MB) PGA_TARGET_FACTOR CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
13 0,125 97 222
25 0,25 99 35
50 0,5 100 0
75 0,75 100 0
100 1 100 0
120 1,2 100 0
140 1,4 100 0
160 1,6 100 0
180 1,8 100 0
200 2 100 0
300 3 100 0
400 4 100 0
600 6 100 0
800 8 100 0

Строка где PGA_TARGET_FACTOR = 1 — это текущий размер SGA — TARGET(MB) = 100Мб. Нужно чтобы ESTD_OVERALLOC_COUNT был равен 0 или стремился к 0, а CACHE_HIT_PERC был равен 100 или стремился к 100. В данном примере видно что можно даже уменьшить размер SGA до 50Мб. Предположим что мы оставляем PGA=100Мб.

2) (Для Oracle 10g и 11g). Определить сколько памяти в ОС мы можем использовать под экземпляр Oracle.

Помимо Oracle на сервер работают и другие процессы и они тоже потребляют память сервера. Поэтому нужно определить сколько памяти потребляется на сервере без участия Oracle. Для этого можно на работающем сервере остановить экземпляр Oracle и посмотреть потребление памяти в диспетчере задач.

image

Для приведенного примера: Всего на сервере 16Гб памяти RAM, используется 7,73Гб, доступно 8424Мб. Т.е. можно использовать 8424Мб. Но у процессов, которые в данный момент запущены на сервере, может увеличиться потребление памяти, тогда сервер станет интенсивно использовать файл подкачки, что резко снизит производительность, что для сервера недопустимо.  Поэтому необходимо оставить запас свободной памяти, от 10% и выше. Предположим что мы оставляем 25% запаса свободной памяти. Тогда у нас остается  8424-(8424*25/100)=6318Мб.

3) Установка размеров областей памяти для Oracle

3.1) Установка размеров областей памяти для Oracle 10g (используется ASMM)

Память потребляемая Oracle — это сумма SGA + PGA. Т.к. для PGA нам необходимо 100Мб, тогда для SGA можно использовать 6318Мб — 100Мб = 6218Мб (округлим до 6Гб).
©Bobrovsky Dmitry
Для установки параметров нужно выполнить в sqlpus под sys команды:
Dmitry Bobrovsky

-- Сохраняем настройки (на всякий случай).
-- В папке %ORACLE_HOME%\database появиться ТЕСТОВЫЙ файл INIT.ora
create pfile from spfile;

-- Увеличение SGA
alter system set sga_max_size=6G scope=spfile;
alter system set sga_target=6G scope=spfile;

-- Гарантированный размер кэша буферов
-- (в SGA будет выделяться гарантированная область
-- под кэш буферов (рекомендуется не менее 90% от SGA),
-- оставшееся место будет использовать
-- под остальные области SGA - не менее 500Мб)
alter system set db_cache_size=5G scope=spfile;

-- Изменение размера PGA
alter system set pga_aggregate_target=100Мб scope=spfile;

-- Перезапустить экземпляр и проверить установленные параметры
select name,value, display_value
from v$parameter
where name in ('db_cache_size','pga_aggregate_target','sga_max_size','sga_target');

3.2) Установка размеров областей памяти для Oracle 11g (используется AMM)

В Oracle 11g с AMM в памяти выделяется одна область под все области, PGA также входит в эту одну общую область, поэтому можно использовать всю вычисленную свободную память 6318Мб (PGA вычитать не нужно). Для удобства округлим 6318Мб до 6Гб.

Для установки параметров нужно выполнить в sqlpus под sys команды:

-- Сохраняем настройки (на всякий случай).
-- В папке %ORACLE_HOME%\database появиться ТЕСТОВЫЙ файл INIT.ora
create pfile from spfile;

-- Увеличение SGA
alter system set memory_max_target=6G scope=spfile;
alter system set memory_target=6G scope=spfile;

-- Гарантированный размер кэша буферов
-- (в SGA будет выделяться гарантированная область
-- под кэш буферов (рекомендуется не менее 90% от SGA),
-- оставшееся место будет использовать
-- под остальные области SGA, в том числе и под PGA,
-- нужно проверить чтобы PGA 100Mb умещалась
-- в оставшееся место 6Гб-5Гб и еще оставалось место
-- под другие области памяти не менее 500Мб)
alter system set db_cache_size=5G scope=spfile;

-- Обнуляем размер PGA
alter system set pga_aggregate_target=0 scope=spfile;

-- Перезапустить экземпляр и проверить установленные параметры
select name,value, display_value
from v$parameter
where name in ('db_cache_size','pga_aggregate_target','sga_max_size','sga_target');

Запись Как увеличить память выделяемую для Oracle 10g и 11g при увеличении RAM на сервере (для Windows)? впервые появилась Dmitry Bobrovsky Blog

— Author: Dmitry Bobrovsky Google