Утечка памяти Oracle 11g в Win 2008? - PullRequest
0 голосов
/ 23 марта 2011

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

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

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

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

1 Ответ

10 голосов
/ 23 марта 2011

Вы уверены, что это утечка, а не SGA, настроенный для использования Oracle?

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

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

...