おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

DB起動時にORA-700が発生

新規構築中の環境で、初期化パラメータ設定後のDB起動時にORA-00700が発生したとの連絡がありました。

環境は以下の通りです。

Oracle Database SE2 19.17.0.0

RHEL 8

発生したエラーの詳細は以下の通りです。

PGA_AGGREGATE_TARGET specified is high
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_18278.trc  (incident=40961):
ORA-00700: soft internal error, arguments: [pga physmem limit], [5033164800], [4708822425], , , , , , , , , []

 

早速MOS(My Oracle Support)で調べたところ、以下のドキュメントが見つかりました。

ORA-700 [sms physmem limit] / [pga physmem limit] Errors while Starting the Database (ドキュメントID 2610312.1)

このドキュメントの最後のNOTEで、以下の事が記載されています。

unpublished Bug 32255740 - PART: ORA 700 [SMS PHYSMEM LIMIT] AND ORA 700 [PGA PHYSMEM LIMIT]
     (which was closed as Not a Bug), Development confirmed that this error is meant to indicate a configuration problem.  The recommended configuration is:
 "The threshold for the ORA-700 is that twice the PGA target plus the SGA size must be less than 90% of physical memory."

 

非公開のバグ32255740(バグでは無いとしてクローズ済)により、PGA targetの2倍+SGAが物理メモリの90%以上であればこのエラーが発生する、という内容ですね。

エラーは発生するもののDB自体は起動します。とは言えORA-700を放置はできないので対処はしなければなりません。

 

…が、計算してもPGA target×2+SGAはRAMの90%を超えてはいませんでした。

また、上記ドキュメント中には「PGA target×2+SGAはRAMの80%を超えるべきではない」との記述もあります。

基本的には現行踏襲を要望されているリプレース案件なのでメモリサイジングは現行踏襲したのですが、PGA target×2+SGAはRAMの80%を超えていました。

そこでPGAサイズを減らしてRAMの80%を超えないよう初期化パラメータを修正したところ、ORA-700は発生しなくなりました。

 

この案件ではLinux,Windows合わせて20近くのDBを構築するので、他のDBでも該当するものが無いか調べたところ、全部で7DBある事がわかりました。

該当すると言っても、PGA target×2+SGAはRAMの80%を超えていますが、90%は超えない状態です。

で、実際に構築を進めたところ、最初にエラーが発生したDBを含めて2DBでエラーが発生し、残り5DBでは発生しませんでした。

ですのでエラー発生の閾値が80%なのか90%なのか不明です。

また、PGA使用量の上限を定めるpga_aggregate_limitはデフォルトではpga_aggregate_targetの2倍ですが、このエラーが発生するのはあくまでpga_aggregate_target×2+SGAがRAMの80%(または90%)を超えた時で、pga_aggregate_limit+SGAがRAMの80%(または90%)を超えでもエラーは発生しないようです。

 

一部、不明点が残ってしまいましたが、19c以降で同様のエラーが出た時の対処法としてはpga_aggregate_targetを減らす、が有効という結論で落ち着きました。