KGL=Kernel General Library cache manager は、名前が示すように、カーソル、キャッシュされた格納されたオブジェクト定義 (PL/SQL ストアド プロシージャ、テーブル定義など) などのライブラリ オブジェクトを処理します。
KGL シミュレーターは、キャッシュが現在よりも大きい場合のキャッシュの利点を見積もるために使用されます。一般的な考え方は、ライブラリ キャッシュ オブジェクトをフラッシュするときに、そのハッシュ値 (および他のいくつかの情報) が KGL シミュレーターのハッシュ テーブルに保持されるというものです。これは、メモリ内にあったがフラッシュアウトされたオブジェクトの履歴を保存します。
ライブラリ キャッシュ オブジェクトをロードするとき (つまり、そのようなオブジェクトがライブラリ キャッシュに存在しないことを意味します)、Oracle は KGL シミュレータ ハッシュ テーブルを調べて、一致するハッシュ値を持つオブジェクトがそこにあるかどうかを確認します。一致するオブジェクトが見つかった場合、それは必要なオブジェクトが過去にキャッシュにあったが、スペース不足のためにフラッシュされたことを意味します。
キャッシュが大きかった場合 (KGL シミュレータの履歴のおかげで) 回避できたライブラリ キャッシュ オブジェクトの (再) ロードの数に関する情報を使用し、オブジェクトの再ロードにかかった時間を知ることで、オラクルは応答時間がどれくらいかかるかを予測できます。共有プールが大きい場合、インスタンス全体で保存されます。これは v$library_cache_advice から見られます。
いずれにせよ、このエラーは、共有プール スペースが不足しているために被害者セッションによって発生した可能性があります。つまり、他の誰かがすべてのメモリ (または十分な大きさのチャンク) を使い果たした可能性があり、そのために KGL sim の割り当てが失敗しました。
v$sgastat は、ORA-4031 エラーのトラブルシューティングの最初のポイントです。共有プールにある空きメモリの量 (およびメモリのほとんどを使用しているユーザー) を特定する必要があります。
-- タネル ポーダー
http://blog.tanelpoder.com