Что такое симулятор Oracle KGL? - PullRequest
0 голосов
/ 08 октября 2008

Что такое вещь, называемая KGL SIMULATOR, и как разработчики приложений могут управлять ее использованием памяти?

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

ORA-04031: невозможно выделить 4032 байта разделяемой памяти («общий пул», «выбрать текст из> view $ where ...», «sga heap (3,0)», «kglsim heap»)

Я читал сообщения на форуме через Google, предполагая, что kglsim связан с KGL SIMULATOR, но нет определения этого компонента или каких-либо советов для разработчиков.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2009

KGL = Kernel General Library кеш-менеджер, поскольку, как следует из названия, он имеет дело с объектами библиотеки, такими как курсоры, определения кешированных хранимых объектов (хранимые процедуры PL / SQL, определения таблиц и т.д.)

Имитатор KGL используется для оценки преимуществ кэширования, если кэш был больше, чем в настоящее время. Общая идея заключается в том, что при очистке объекта кэша библиотеки его хеш-значение (и несколько других битов информации) все еще хранятся в хеш-таблице симулятора KGL. Здесь хранится история объектов, которые были в памяти, но очищены.

При загрузке объекта кеша библиотеки (что означает, что в кеше библиотеки нет такого объекта), Oracle проверяет хеш-таблицу симулятора KGL, чтобы увидеть, есть ли там объект с совпадающим хеш-значением. Если соответствующий объект найден, это означает, что требуемый объект ранее находился в кэше, но был удален из-за нехватки места.

Используя эту информацию о том, сколько можно было бы избежать (повторных) загрузок кеша библиотеки, если бы кеш был больше (благодаря истории симулятора KGL), и зная, сколько времени потребовалось для перезагрузки объекта, Oracle может предсказать, сколько времени отклика был бы сохранен в масштабе всего экземпляра, если бы общий пул был больше. Это видно из v $ library_cache_advice.

В любом случае, эта ошибка, вероятно, была вызвана сеансом жертвы из-за нехватки общего пула. Другими словами, кто-то другой мог израсходовать всю память (или все достаточно большие куски), и это выделение для сима KGL не удалось из-за этого.

v $ sgastat будет первым пунктом для устранения ошибок ORA-4031, вам нужно определить, сколько свободной памяти у вас в общем пуле (и кто использует большую часть памяти).

- Танель Подер http://blog.tanelpoder.com

1 голос
/ 09 октября 2008

Я обнаружил, что KGL означает "Универсальная библиотека ядра".

Ваша проблема может быть утечка памяти в Oracle. Возможно, вам следует открыть дело с поддержкой Oracle.

...