web-dev-qa-db-ja.com

ORA-04036:インスタンスで使用されるPGAメモリーがPGA_AGGREGATE_LIMITを超えています

チームメンバーの1人がOracleテキストインデックスを作成しているときに、ORA-04036(12c)に出会いました。

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
ORA-00039: error during periodic action
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
5
pahariayogi

私の場合、インデックス(または他の並列操作)の作成中に非常に高い並列度48(必要なセッションが多すぎてPGAが増加する)が原因で失敗しました。これを回避するには、並列処理を減らすようにしてください。 DOP 8スクリプトを試してみましたが、正常に実行されました。

Oracle Database 12cでは、PGA_AGGREGATE_LIMITと呼ばれる新しいパラメータにより、インスタンスで使用されるPGAの量にハード制限が設定されます。そのインスタンスのすべてのセッションが占有するPGA全体が制限を超えると、Oracleは最も調整不能なPGAメモリを保持しているセッションを強制終了し、そのセッションが保持しているすべてのPGAメモリを解放します。強制終了されたセッションはこのメッセージを受け取ります。

新しいOracleエラーORA-4036に注意してください。これは、未調整のクエリを発行するセッションによる暴走したPGAの消費を制御するための非常に便利な機能です。パラメーターpga_aggregate_limitは、明示的に定義されていない場合、次の3つの数値のうち大きい方にデフォルト設定されます。合計SGAサイズを削除した後。この新しい機能が気に入らず、以前の(12c以前の)動作に戻りたいですか?承知しました; pga_aggregate_limitの値を0に設定するだけで、パラメーターは影響を与えません。

SOまだ見つけることができなかったので、コミュニティの読者の利益のために回答を投稿します。詳細は、 this を参照してください...

7
pahariayogi

私は同様の問題を抱えていて、以下を実行することで解決しました。

これを使用して、現在のpga_aggregate_limitが何であるかを確認します(変更を元に戻したい場合)。

show parameter pga_aggregate_limit;

これを使用してpga_aggregate_limitを0に設定します。

alter system set pga_aggregate_limit = 0; 

詳細についてはこちらをご覧ください。

http://www.dba-Oracle.com/t_pga_aggregate_limit.htm

https://docs.Oracle.com/database/121/REFRN/GUID-E364D0E5-19F2-4081-B55E-131DF09CFDB3.htm#REFRN10328

3
John