Что это за штука, называемая СИМУЛЯТОРОМ KGL, и как разработчики приложений могут управлять использованием памяти?
Предпосылкой к вопросу является то, что я иногда получаю такие ошибки, как следующие, и хотел бы получить общее представление о том, что использует это пространство кучи?
ORA-04031: unable to allocate 4032 bytes of shared memory ("shared pool","select text from > view$ where...","sga heap(3,0)","kglsim heap")
Я читал сообщения на форуме через Google, в которых говорилось, что kglsim связан с KGL SIMULATOR, но нет определения этого компонента или каких-либо советов для разработчиков.





Я обнаружил, что KGL означает «Общая библиотека ядра».
Ваша проблема может заключаться в утечке памяти в Oracle. Вероятно, вам стоит открыть дело с поддержкой Oracle.
KGL = Kernel General Library cache manager, как следует из названия, он имеет дело с объектами библиотеки, такими как курсоры, кешированные определения сохраненных объектов (хранимые процедуры PL / SQL, определения таблиц и т. д.).
Симулятор KGL используется для оценки преимущества кэширования, если размер кеша превышает текущий. Общая идея заключается в том, что при очистке объекта кэша библиотеки его хеш-значение (и несколько других битов информации) по-прежнему сохраняется в хеш-таблице симулятора KGL. Это хранит историю объектов, которые были в памяти, но удалены.
При загрузке объекта кэша библиотеки (что означает, что такого объекта нет в кеше библиотеки), Oracle проверяет хэш-таблицу симулятора KGL, чтобы увидеть, есть ли там объект с соответствующим хеш-значением. Если соответствующий объект найден, это означает, что требуемый объект был в кеше в прошлом, но был удален из-за нехватки места.
Используя эту информацию о том, сколько (повторных) загрузок объекта кэша библиотеки можно было бы избежать, если бы кеш был больше (благодаря истории симулятора KGL), и зная, сколько времени потребовалось для перезагрузки объекта, Oracle может предсказать, сколько времени было бы сохраняется в масштабе всего экземпляра, если общий пул был больше. Это видно из v $ library_cache_advice.
В любом случае, эта ошибка, вероятно, была вызвана сеансом жертвы из-за нехватки пространства общего пула. Другими словами, кто-то другой мог использовать всю память (или все достаточно большие фрагменты), и это выделение для KGL sim не удалось из-за этого.
v $ sgastat будет первой точкой для устранения ошибок ORA-4031, вам нужно определить, сколько свободной памяти у вас есть в общем пуле (и кто использует большую часть памяти).
- Танель Подер http://blog.tanelpoder.com