0

この KGL SIMULATOR とは何ですか? また、アプリケーション開発者はそのメモリ使用率をどのように管理できますか?

質問の背景は、次のようなエラーが時々発生し、このヒープスペースを使用しているものについて一般的な理解を得たいということですか?

ORA-04031: 4032バイトの共有メモリーを割当てできません("shared pool","select text from > view$ where...","sga heap(3,0)","kglsim heap")

kglsim が KGL SIMULATOR に関連していることを示唆する Google のフォーラム投稿を読みましたが、そのコンポーネントの定義や開発者向けのヒントはありません。

4

2 に答える 2

3

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

于 2009-02-17T02:02:12.783 に答える
1

KGL は「Kernel Generic Library」の略であることがわかりました。

問題は、Oracle 内のメモリ リークである可能性があります。おそらく、Oracle サポートでケースを開く必要があります。

于 2008-10-09T13:57:02.393 に答える