Oracleエラー対応(ORA-04036):PGA領域が枯渇してORA-04036が発生

現役DBAが解説-Oracleエラー対応
エラーメッセージ
ORA-04036:インスタンスにより使用されるPGAメモリーがPGA_AGGREGATE_LIMITを超えています
原因
PGAへの割り当てが初期化パラメータ「PGA_AGGREGATE_LIMIT」に設定されている値以上となった場合に、ORA-04036が発生します。
PGA_AGGREGATE_TARGETで設定する値はあくまで目標値となるため、アプリケーション処理によってはこの値以上にPGAが割り当てられる場合もありますが、PGA_AGGREGATE_LIMITはOracle Database 12cから新しく追加されたPGAメモリ使用量の強制制限値を設定するパラメータとなります。
解決策
①PGA_AGGREGATE_LIMITの値を拡張する。
※alter system文でDB再起動なしで変更可能です。
SQL> alter system set pga_aggregate_limit=5GB;
②PGA_AGGREGATE_LIMITを無効化する。
※値を0とすることで無効化されます。
SQL> alter system set pga_aggregate_limit=0; System altered. SQL> show parameter pga NAME TYPE VALUE --------------------------- -------------- ------------- pga_aggregate_limit big integer 0 pga_aggregate_target big integer 1344M
値を変更する場合、2048MB未満の値にはできません。
SQL> alter system set pga_aggregate_limit=100M;
alter system set pga_aggregate_limit=100M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00093: pga_aggregate_limit must be between 2048M and 100000G
デフォルト値はリファレンス(12.1)によると、以下のいずれかの一番大きな値に設定されています。
- 2GB
- PGA_AGGREGATE_TARGETの200%
- PROCESSESパラメータ × 3MB
まとめ
- PGA_AGGREGATE_LIMITの値を余裕を持った数値にしておく
- PGA_AGGREGATE_LIMITを無効化する
※無効化=11g以前と同じ動作
今回ご紹介したORA-04036に対するアクションになります。
このようなエラーは一度発生すると再発する可能性が高いので事前策を講じておくことをお勧めします。