DBAtlas · データベース運用アトラス

ORA-04031: Unable to allocate N bytes of shared memory(共有メモリを割り当てられない)

Oracle

意味

共有メモリプール (通常は shared pool または large pool) に、要求サイズの連続メモリを割り当てられなかった。SGA コンポーネントがメモリ不足の状態にある。

原因

バインド変数を使わない (リテラルだらけの) 一意な SQL 文の多発による shared pool の断片化、不十分な SHARED_POOL_SIZE、過剰な同時接続、大きな PL/SQL パッケージ、または ASMM/AMM のサイズ設定の誤り。

対処方法

エラーメッセージがどのプール (shared pool、large pool など) を示しているか確認する。短期対応: ALTER SYSTEM FLUSH SHARED_POOL (注意: 本番ではすべての SQL の再解析、つまり一時的なハードパースの嵐を招き、断片化を恒久的には解消しない)。恒久対応: バインド変数の使用を徹底する (CURSOR_SHARING を含む)。SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE を増やす。頻繁に使うパッケージは DBMS_SHARED_POOL.KEEP でメモリに固定する。メモリ配分は V$SGASTAT で調べる。

DBAtlas で開く →

同じデータベースの他の項目