AWS RDS for Oracleメモリー不足際の解決案

皆さん、こんにちは
本日は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

Last modified: 2023-10-20

Author