RDSのデフォルトパラメータグループは使ってはいけない

スポンサーリンク

はじめに

RDS の DB インスタンスを新規に作成する時に、何も指定しないとデフォルトのパラメータグループを使う設定となる。
デフォルトのパラメータグループなので、とりあえずはこれを使っておくのが無難かなと思いきや、使ってはいけないという話。

ちなみに、MySQL 前提での話だけど、PostgreSQL など他のエンジンでも基本的には同じはず。

デフォルトのパラメータグループを使うと起きる問題

DB を使っていると、設定を変更したくなることが多々ある。
例えば、DB インスタンスのリソースがまだガッツリ残っているのに Too many connections が出るようになったので、max_connections を引き上げたくなったとか。
それ以外にも、slow_query_log を出したい/出したくないとか、その閾値 long_query_time を変えたいなどといったことはよくあるはずだし、その他にもいろいろあるだろう。
しかし、、、実はデフォルトのパラメータグループではパラメータの設定変更が一切できない。
つまり、どうしても設定変更をしたい場合には、まずは DB インスタンスが使用しているパラメータグループ自体を変えないといけないことになる。

さらに、、、使用するパラメータグループを変更する際には、DB インスタンスの再起動 が必要。
つまり、サービスを止めないといけない。

この辺の話については、AWS のページにもしっかり記載されているので、下記参照。

Amazon RDS DB パラメータグループの値を変更する

まとめると、DB インスタンスを作成する時に、安易にデフォルトのパラメータグループを使うことを選択すると、少しでも設定変更をしたいと思った時には、サービスを停止しないといけなくなる。
独自のパラメータグループを作成することは簡単なので、DB インスタンスの作成時には必ずパラメータグループも新規に作成するようにすべき。

パラメータの変更

稼働中の DB インスタンスで使われているパラメータグループの設定パラメータの変更は、DB インスタンスの再起動をすることなく、動的に行える。
ただし、動的パラメータと呼ばれるパラメータのみで、静的パラメータの変更後の有効化には再起動が必要となる。

この辺の情報も上記の AWS のページに記載がある。

パラメータグループの共有

独自に作成したパラメータグループを複数の DB インスタンスで共有することも可能。
これはこれで便利な仕組みだが、注意が必要。
設定パラメータの変更は、あくまでもパラメータグループの内容の変更になる。
従って、設定パラメータを変更するとそのパラメータグループを参照しているすべての DB インスタンスの設定が変更される。

よって、明確に設定値を揃える必要がない限りは、基本的にはそれぞれの DB インスタンスには別々のパラメータグループを用意する方が無難。
例えば、同じ種別の複数台のreadレプリカには同じパラメータグループを割り当てた方が都合が良いといったことはあり得る。

結論

  • サービスを簡単に停止できない DB インスタンスにはデフォルトのパラメータグループは使わない
  • 特別な理由がない限りは、パラメータグループは DB インスタンスごとに作成して関連づける

というか、デフォルトのパラメータグループというのはテンプレート的な役割としてだけ使うことにして、DB インスタンスの作成時にはデフォルトで新規にパラメータグループを作成するような仕様に RDS がなっていないのが不思議なレベル。

コメント

タイトルとURLをコピーしました