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