RDSのパラメータ値はどうやって決まるのか

2014.01.24

こんにちは。望月です。
RDSはマネージドのデータベースサービスです。RDSを利用するユーザーは、RDSによって作成されたデータベースに対して「SQLを投げ、その結果を取得する」以外の行為を行うことが出来ません。
つまり自前でデータベースを構築するときのように、パラメータをいじったり(MySQLでいえばmy.cnf)OSをチューニングしたり、SSHでログインしてログ調査をしたりすることができません。

そういった要望をサポートするための機能がRDSには用意されています。その一つがParameter Groupです。この値を設定することで、DBの各種設定値を調整することができます。

空白のvalue

ところで、parameter groupsの値を見てみると、valueの値が空欄になっているものがあります。例えばOracleの同時接続数を示すsessionsなどです。

2014-01-24_1207

この値がどういう扱いなのかはドキュメントに記載されています。

A default DB parameter group is used if you create a DB instance without specifying a DB parameter group. This default group contains database engine defaults and Amazon RDS system defaults based on the engine, compute class, and allocated storage of the instance.

「DBエンジン、インスタンスのクラス(m1.smallなど)、DBのストレージサイズに応じたデフォルトの値が割り振られる」ということです。つまり、同じParameter Groupsを使用していても、上記の条件が異なれば設定値は違ってきます。

検証

というわけで上記のsessionsを例に、以下の条件で実際に試してみました。

  • Oracle SE One 11.2.0.3
  • インスタンスタイプ : db.m1.{small,medium,large} の3種類
  • ストレージサイズ : 10GBと1TBの2種類

結果は以下の通りです。

インスタンスタイプ 10GB 1TB
db.m1.small 260 260
db.m1.medium 601 601
db.m1.large 1214 1214

インスタンスタイプが変わるとsessionsの値に変更があることがわかります。一方で、ストレージのサイズには影響されていないこともわかりました。この値はRDS用にあらかじめチューニングされた値なので、特段の理由がなければ変更しないほうがよいそうです。 MySQL等についても同様の変化が見られると思うので、気になる方は検証をしてみてください。

また、valueの部分にマクロのような文字列が入力されているものもあります。例えばmysql5.5のinnodb_buffer_pool_size{DBInstanceClassMemory*3/4}となっています。これも同じようにインスタンスタイプに応じて変更される値となっています。

まとめ

RDSのParameter Groupsがどのような値に設定されるかは動作している環境により左右されるので、今稼働しているインスタンスがどういうパラメータで動いているかは、各開発者内で共有しておくとトラブルが少なくなると思います。気になる方はご自身の環境で検証してみてください。