PS課の杉村です。RDSのメモリ使用率が高くて心配になることはないでしょうか。 たとえRDSのメモリ使用率が80%~90%といった高い水準になっていても、それ自体をあまり心配する必要はない、という内容についてご説明します。
CloudWatchを利用するとRDSの各種パフォーマンス情報を閲覧することができます。 例えばFreeableMemoryメトリクスを見ることで、RDSの使われていないメモリ領域を確認することができます。
Oracle RDSを例にとります。 あるお客様で、Oracle RDSのメモリ使用率が、常時80%~90%くらいの間になっていることがありました。 これについて調べましたので、その結果を書いてみたいと思います。
ポイント
- RDBMSにおいては常時メモリ使用率が高いことは通常の挙動である
- Oraleに限らず、RDBMSではストレージへのアクセスを最小化するためにテーブル、インデックス、トランザクション・ログ等をメモリ上にキャッシュする
- 多くのRDBMSにて、システムで利用可能なメモリの大部分(70~80%前後程度)をキャッシュに割り当てることがベスト・プラクティス
- Oracle RDSインスタンスはデフォルトで最大87.5%のメモリを使うよう設定されている (r4クラスの場合)
- その他のOS等のプロセスのメモリ使用率も上乗せされてくるが、RDSでは使用率を圧迫しすぎないようチューニングされている
詳細
以下に根拠となるドキュメントや設定値、理屈について記載してみます。
Oracleでは初期化パラメータのMEMORY_MAX_TARGETおよびMEMORY_TARGETを指定することで自動メモリチューニングがONになり、メモリ領域の自動管理がされます。しかしOracle RDSのパラメータグループではMEMORY_MAX_TARGET/MEMORY_TARGETはいずれもデフォルトで以下の通りです。
IF({DBInstanceClassHugePagesDefault}, 0, {DBInstanceClassMemory*3/4})
Huge Pages機能がデフォルトでOFFのインスタンスクラス(m4, m3, r3, t2)では、この値が「DBInstanceClassMemory*3/4」になりますため、インスタンスのメモリ総量の3/4...つまり 75% がOracleが利用するメモリの最大値になります。
一方でHuge Pages機能がデフォルトでONのインスタンスクラス(r4, r5, m5など)ではMEMORY_MAX_TARGET/MEMORY_TARGETが0になりこのパラメータを用いる自動メモリ管理が無効化されます。その代わりに別の仕組み(自動PGA/SGA管理)でメモリ管理が行われるようになり、SGA_TARGET, PGA_AGGREGATE_TARGETの二つのパラメータによりメモリ領域の管理が行われます。 以下、それぞれのRDSにおけるデフォルト値です。
sga_target
IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*3/4}, 0)
pga_aggregate_target
IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*1/8}, 0)
SGAとPGAを足しますと {DBInstanceClassMemory<em>3/4} + {DBInstanceClassMemory</em>1/8}
となりますためインスタンスのメモリ総量の87.5%がOracleが使用する最大値です。
これにプラスしてOSやRDSとしての監視機構のメモリ使用率が上乗せされますが、多くのワークロードで正常に動作するようにAWSによってチューニングされていますので100%に張り付くのでは?という心配はあまりありません。
気を付けるべきこと
これらの理由によって、RDSで常時80%~90%を超えるようなメモリ利用率でも大きな問題とはならない、というわけです。
むしろその内訳...メモリが適切に利用されているかどうかについて、StatspackやAWRなどを利用してチェックすることがより大事になってきます。
またCloudWatchのメトリクスにSwapUsageがあり、スワップの使用量が分かるようになっていますので、そちらも要監視です。 メモリが足りずSwapに落ちるようなことが頻発していれば、インスタンスタイプの変更を検討したほうがよいということになるでしょう。
杉村 勇馬 (記事一覧)
サーバーワークス → 株式会社G-gen 執行役員CTO
2021 Japan APN Ambassadors / 2021 APN All AWS Certifications Engineers
マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログ記事を過去に執筆。
2021年09月から株式会社G-genに出向、Google Cloud(GCP)が専門に。G-genでもGoogle Cloud (GCP) の技術ブログを執筆中。