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に対するアクションになります。
このようなエラーは一度発生すると再発する可能性が高いので事前策を講じておくことをお勧めします。