Auroraのパラメータグループの優先順位について実験してみた

こんにちは。AWS事業本部のKyoです。

AuroraのDB パラメータグループおよび DB クラスターパラメータグループについて、どちらが優先されるのかイメージしづらかったので、実験してみました。

Auroraのパラメータグループとは

Auroraのパラメータグループには以下の二種類が存在します。

  • DB クラスターパラメータグループ
  • DB パラメータグループ

公式ドキュメントによる定義は以下です。

DB クラスターパラメータグループ

DB クラスターパラメータグループのパラメータは、DB クラスター内のすべての DB インスタンスに適用されます。データは、Aurora 共有ストレージサブシステムに保存されます。このため、テーブルデータの物理レイアウトに関連するすべてのパラメータは、Aurora クラスター内のすべての DB インスタンスで同じにする必要があります。同様に、Aurora DB インスタンスはレプリケーションで接続されているため、レプリケーション設定のすべてのパラメータは Aurora クラスター全体で同じにする必要があります。

DB パラメータグループ

DB パラメータグループのパラメータは、Aurora DB クラスター内の単一の DB インスタンスに適用されます。これらのパラメータは、同じ Aurora クラスター内の DB インスタンス間で変化させることができるメモリ使用量などの要素に関連しています。たとえば、クラスターには、AWS インスタンスクラスが異なる DB インスタンスが含まれる場合がよくあります。

長いので以下、DB クラスターパラメータG, DBパラメータGと表記します。

やってみた

実験方法

  1. Auroraクラスタ(db.r5.large), DB クラスターパラメータG, DBパラメータGを作成
  2. DB クラスターパラメータG, DBパラメータGのmax_connectionsの設定値を後述のケースで指定するものに変更
  3. EC2からWriter, Readerそれぞれのエンドポイントに接続しSELECT @@max_connections;を実施
  4. ケース5についてはデフォルトの値を再設定不能なため、DBパラメータGを新しく作成し、Writer, Reader共に適用(再起動)。その後SELECT @@max_connections;を実施

※ケース 1-4については連続的に実施

実験結果

下記の結果が得られました。

ケース DB クラスターパラメータGの設定値 DB パラメータGの設定値 Writerの測定値 Readerの測定値 反映されたパラメータG
1 デフォルト デフォルト 1000 200 -
2 デフォルト 50 50 200 DB パラメータG
3 300    50 50 200 DB パラメータG
4 600 25 25 200 DB パラメータG
5 600 デフォルト 600 200 DB クラスターパラメータG

※(max_connectionsの)デフォルト: GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})

基本的に「DB パラメータG」の値が適用されており、DB パラメータGの値がデフォルトの際に「DB クラスターパラメータG」の値が適用されています。

これは公式ドキュメント通りの挙動でした。

非サーバーレスクラスターの場合、DB クラスターパラメータグループで変更した設定値は、DB パラメータグループのデフォルト値を上書きします。 DB パラメータグループ内の対応する値を編集すると、これらの値によって DB クラスターパラメータグループの設定が上書きされます。

おわりに

パラメータグループが2つあることで混乱しやすいAuroraですが、個別のインスタンスに適用する「DB パラメータG」が優先で、「DB パラメータG」がデフォルトの際に「DB クラスターパラメータG」が適用されると理解すると良いようです。

以上、何かのお役に立てれば幸いです。