Auroraのパラメータグループの優先順位について実験してみた
2020/03/03 実験条件を見直し、加筆修正を行いました。
こんにちは。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と表記します。
やってみた
対象クラスタ
- エンジン: Aurora MySQL 5.6.10a
- インスタンスタイプ: db.r5.large
- クラスタ構成: Writer x1, Reader x1
実験方法
- Auroraクラスタ, DB クラスターパラメータG, DBパラメータGを作成(DBパラメータGはWriter, Readeで共通)
- DB クラスターパラメータG, DBパラメータGの
max_connections
の設定値を後述のケースで指定するものに変更 - EC2からWriter, Readerそれぞれのエンドポイントに接続し
SELECT @@max_connections;
を実施 - ケース5についてはデフォルトの値を再設定不能なため、DBパラメータGを新しく作成し、Writer, Reader共に適用(再起動)。その後
SELECT @@max_connections;
を実施
※ケース 1-4については連続的に実施
実験結果
下記の結果が得られました。
ケース | DB クラスターパラメータGの設定値 | DB パラメータGの設定値 | Writerの測定値 | Readerの測定値 | 反映されたパラメータG |
---|---|---|---|---|---|
1 | デフォルト | デフォルト | 1000 | 1000 | - |
2 | デフォルト | 50 | 50 | 50 | DB パラメータG |
3 | 300 | 50 | 50 | 50 | DB パラメータG |
4 | 600 | 50 | 50 | 50 | DB パラメータG |
5 | 600 | デフォルト | 600 | 600 | DB クラスターパラメータG |
※(max_connectionsの)デフォルト: GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})
原則として「DB パラメータG」の値が適用されており、DB パラメータGの値がデフォルトの際に「DB クラスターパラメータG」の値が適用されています。実験結果から、変更の順序に関係なく、DB パラメータGの設定値がデフォルトであることが基準であると考えられました。
これは公式ドキュメントと一致します。
非サーバーレスクラスターの場合、DB クラスターパラメータグループで変更した設定値は、DB パラメータグループのデフォルト値を上書きします。 DB パラメータグループ内の対応する値を編集すると、これらの値によって DB クラスターパラメータグループの設定が上書きされます。
【補足】 Writer, Readerで異なるDB パラメータGが設定されている場合
Writer, Readerに異なるDB パラメータGを設定するとどうなるかについても実験してみました。
変更点は以下です。
- Writer, Readerに異なるDB パラメータGを設定
- DB パラメータGはWriterの
max_connections
のみ変更 - ReaderのDB パラメータGの設定値は常にデフォルト
ケース | DB クラスターパラメータGの設定値 | DB パラメータGの設定値 | Writerの測定値 | Readerの測定値 | 反映されたパラメータG |
---|---|---|---|---|---|
1 | デフォルト | デフォルト | 1000 | 1000 | - |
2 | デフォルト | 50 | 50 | 1000 | DB パラメータG |
3 | 300 | 50 | 50 | 300 | DB パラメータG |
4 | 600 | 50 | 50 | 600 | DB パラメータG |
5 | 600 | デフォルト | 600 | 600 | DB クラスターパラメータG |
この結果から、Writer, Readerに異なるDB パラメータGを設定した場合、それぞれの測定値は独立に振舞うことが確認できました。
余談ですが、この実験条件では以下の様なレコメンドが表示されていました。DBインスタンスの互換性の観点から、クラスター内のDBインスタンスには同一のパラメータGを適用することが推奨されているようです。
おわりに
パラメータグループが2つあることで混乱しやすいAuroraですが、個別のインスタンスに適用する「DB パラメータG」が優先で、「DB パラメータG」がデフォルトの際に「DB クラスターパラメータG」が適用されると理解すると良いようです。
以上、何かのお役に立てれば幸いです。