皆さん、こんにちは
本日はAWS RDS for Oracle利用する時、メモリー不足の解決策を説明します。
困っていた内容
先日、お客様オンプレミス環境のOracle12cからAWS RDS 19Cに移行しました。
移行後初日で空きメモリ(FreeableMemory )が少ない問題とスワップ使用率(SwapUsage )が高い問題を発生しまいました。
実は、事前にトライアル移行して、テストを実施しましたが、当時接続数が少ないから、
問題が発見出来なかったです。
どう対応すればいいの?
パラメータのプログラムグローバル領域 (PGA) および システムグローバル領域 (SGA) 毎のメモリ使用率を調整してから解決できました。
今回は「インスタンスが自動共有メモリ」のインスタンスタイプを利用しているので、パラメータには次のデフォルト値に設定されます。
デフォルト値
- pga_aggregate_target= {DBInstanceClassMemory*1/8}
- sga_target= {DBInstanceClassMemory*3/4}
SQL文より確認します
SQL> SHOW PARAMETER SGA;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 23680M
sga_min_size big integer 0
sga_target big integer 23680M
unified_audit_sga_queue_size integer 1048576
SQL> SHOW PARAMETER PGA;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 10041M
pga_aggregate_target big integer 4129919488
SQL> SELECT (value/1024/1024) CURRENT_PGA_IN_USE_IN_MB FROM V$PGASTAT WHERE NAME ='total PGA inuse';
CURRENT_PGA_IN_USE_IN_MB
------------------------
3432.8877
変更後
- pga_aggregate_target= {DBInstanceClassMemory*1/12}
- sga_target = {DBInstanceClassMemory*1/2}
SQL文より確認します
SQL> SHOW PARAMETER SGA;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 15776M
sga_min_size big integer 0
sga_target big integer 15776M
unified_audit_sga_queue_size integer 1048576
SQL> SHOW PARAMETER PGA;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 10041M
pga_aggregate_target big integer 2753279658
SQL> SELECT (value/1024/1024) CURRENT_PGA_IN_USE_IN_MB FROM V$PGASTAT WHERE NAME ='total PGA inuse';
CURRENT_PGA_IN_USE_IN_MB
------------------------
285.933594
まとめ
AWS RDS for Oracle を利用する場合、多くのパラメータがデフォルトの設定で提供されますが、全てのパラメータが必須というわけではので、
実際には、アプリケーションやワークロードの特性に応じて適切なパラメータ設定が必要となることが多いです。
pga_aggregate_target と sga_target以外、processesやopen_cursorsなど具体的な特性より、設定も必要です。
以上です。
参考になれば幸いです。
参考URL
https://repost.aws/ja/knowledge-center/rds-oracle-low-memory-high-swap