ORA-04031: 共有メモリーのstringバイトを割当てできません

ORA-04031が発生した場合、以下のKROWNを参考に調査を行う。

KROWN:10602
1. 共有プールが断片化されている等の理由で、十分な連続領域が確保できない
    # 大規模プールを利用するのは特定のケースのみであるため、通常、断片化が顕著
    # になるほど細かく利用されることはありません。
 2. 共有プール、大規模プールのサイズが不足している

 さらに細かく考えると
 1-1. 断片化が顕著になり、連続空き領域が確保できていない
 1-2. 予約済み領域のサイズが不適切で、予約済み領域が不足している、又は予約済み
      領域が余っていて通常の共有プールが不足している
 2-1. カーソルの共有が行えていないため、共有プールを無駄に消費している
 2-2. 大きなPL/SQLオブジェクトに必要な領域を共有プール上に確保できない
 2-3. 根本的に共有メモリのサイズが少ない
 といったような原因が考えられます。


対策
1-1:断片化を解消するためには、権限のあるユーザーで
      SQL> alter system flush shared_pool;

1-2. ORA-4031の発生後すぐに次のSQL文を実行します

      SQL> SELECT free_space, used_space, request_misses, last_failure_size 
        2    FROM v$shared_pool_reserved;

      その結果
      request_misses > 0 の場合
            SHARED_POOL_RESERVED_SIZEの値を増加させることを考慮します。

      request_misses = 0 の場合
                 SHARED_POOL_RESERVED_SIZEの値を減らして予約済み領域に割り当てられてい
                 たメモリを通常の共有プールに割り当ててやる、又はSHARED_POOL_SIZEの値
                 を増やして共有プールのサイズを上げることを考慮します。

2-1. カーソルの共有等が行えていないため、バインド変数を活用することで共有プールの無駄な消費を抑える。

2-2. あらかじめ頻繁に使用されるサイズの大きなPL/SQLオブジェクトをプロシージャDBMS_SHARED_POOL.KEEPを使用することで
   一旦共有プール上に確保したオブジェクトが共有プールからフラッシュされないようにする。
   DBMS_SHARED_POOLパッケージについては、次のKROWNを参照してください。
      参考 KROWN:53356 DBMS_SHARED_POOLパッケージによる共有プールの有効活用

2-3. SHARED_POOL_SIZEを増加させる

タグ:

+ タグ編集
  • タグ:
最終更新:2011年08月24日 14:12
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。