Утечка памяти Oracle 11g в Win 2008?

Итак, у нас есть экземпляр Oracle 11g, работающий на сервере Win 2008 R2. Хотя я знаю, что Oracle и Microsoft могут не слишком хорошо ладить, дело доходит до того, что Oracle съедает около 50% оперативной памяти на коробке и никогда не освобождает ее, поэтому время от времени я отказываюсь от службы только для того, чтобы промойте его. Я пытался найти, есть ли альтернатива освобождению этой памяти каким-то образом без необходимости отбрасывать службу, но пока безуспешно.

Кто-нибудь еще сталкивался с этим и нашел способ сбросить эту память альтернативными способами? Любой вклад будет оценен!

Вот текущие выделения из spfile/parameters в этом экземпляре... Если у вас есть предложения по настройке на основе доступной памяти, просто дайте мне знать, что вам нужно, и я могу предоставить дополнительную информацию. Большое спасибо за ваш вклад в это.

archive_lag_target                   integer  0
db_flashback_retention_target        integer  1440
fast_start_io_target                 integer  0
fast_start_mttr_target               integer  0
memory_max_target                    integer  10368319488
memory_target                        integer  10368319488
parallel_servers_target              integer  64
pga_aggregate_target                 integer  0
sga_target                           integer  0

person denisb    schedule 23.03.2011    source источник


Ответы (1)


Вы уверены, что это утечка, а не SGA, на которую настроен Oracle?

В общем, независимо от платформы, Oracle собирается выделить большой кусок памяти при запуске для SGA (System Global Area). Это то, что база данных использует для таких вещей, как кэширование блоков в ОЗУ, кэширование операторов SQL и т. д. Каждый раз, когда создается сеанс, Oracle будет выделять гораздо меньший фрагмент памяти для PGA (глобальной области программы) этого сеанса. Это память для таких вещей, как сортировка и хеширование, которые будут увеличиваться и уменьшаться по мере необходимости. Нет ничего необычного в том, чтобы настроить Oracle на использование половины физической оперативной памяти машины в качестве SGA и 15-20% физической оперативной памяти для всего PGA, оставив оставшуюся часть для операционной системы и других приложений. Вы должны иметь возможность уменьшить использование этой памяти, хотя это может вызвать проблемы с производительностью, поскольку для большего количества операций ввода-вывода требуется физическое чтение, а не удовлетворение из кеша.

Ваши настройки конфигурации предписывают Oracle использовать до 9,65 ГБ ОЗУ между SGA и PGA и распределять эту память по своему усмотрению. Было бы вполне разумно ожидать, что Oracle захватит 6 или 7 ГБ ОЗУ при запуске для SGA и сохранит это выделенное ОЗУ навсегда. И что под нагрузкой у Oracle, вероятно, будет около 9,65 ГБ ОЗУ, выделенного между общим SGA и PGA уровня сеанса. Это поведение, которое вы видите? Если это так, похоже, что Oracle ведет себя так, как ожидалось, утечки памяти нет и нет необходимости перезапускать службу.

person Justin Cave    schedule 23.03.2011
comment
+1, как всегда хороший ответ от Джастина. На сайте Берлесона есть хорошая краткая информация по этой теме: dba-oracle.com/oracle11g/oracle_11g_memory_target_parameter. htm - person DCookie; 23.03.2011
comment
SGA должен быть «схвачен» при запуске. PGA будет захвачен процессом по мере необходимости. Процесс может освободить его или удерживать до тех пор, пока процесс не завершится (например, выход из сеанса). Если ваше приложение использует пул соединений и не завершает свои сеансы, это может иметь такой эффект. - person Gary Myers; 24.03.2011