Что такое симулятор Oracle KGL?
Что это за вещь, называемая KGL SIMULATOR, и как разработчики приложений могут управлять ее использованием памяти?
Исходная информация к этому вопросу заключается в том, что я иногда получаю ошибки, подобные следующим, и хотел бы получить общее представление о том, что использует это пространство кучи?
ORA-04031: невозможно выделить 4032 байта разделяемой памяти ("общий пул", "выбрать текст из> view $ where...", "sga heap (3,0)", "kglsim heap")
Я читал сообщения на форуме через Google, предполагая, что kglsim связан с KGL SIMULATOR, но нет определения этого компонента или каких-либо советов для разработчиков.
2 ответа
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/
Я обнаружил, что KGL означает "Универсальная библиотека ядра".
Ваша проблема может быть утечка памяти в Oracle. Вам, вероятно, следует открыть дело с поддержкой Oracle.