油断すると忘れてしまうかもしれないAmazon Aurora MySQLのパラメータグループの豆知識

記事タイトルとURLをコピーする

こんにちは。
DevOpsが好きなアプリケーションサービス部の兼安です。
今回はパラメータグループのお話です。
(主に私が)油断すると忘れそうなAmazon Aurora MySQLのパラメータグループの豆知識をいくつか書いてみました。

本記事の対象者

本記事はデータベース管理の初心者向けに書いています。
これからデータベースを構築する方や、データベースの設定を変更したい方に向けて書いています。

本記事執筆にあたった際の検証環境

本記事は執筆にあたり、以下の環境を使用しています。
また、本記事は2024年7月時点での内容です。

  • Amazon Aurora MySQL 3.05.2

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

Amazon Aurora Compatible with MySQLのパラメータグループは、データベースの設定を変更するためのものです。
パラメータグループは、データベースのインスタンスから切り離されています。
従って、パラメータグループを複数のデータベースインスタンスに適用して設定を集約することができます。

docs.aws.amazon.com

デフォルトおよびカスタムパラメータグループ

Amazon Aurora MySQLには、デフォルトパラメータグループとカスタムパラメータグループの2つのタイプがあります。
Amazon Aurora MySQLでデータベースを作成すると、デフォルトパラメータグループが自動的に適用されます。
デフォルトパラメータグループは、パラメータを変更することができません。
パラメータを変更する場合は、カスタムパラメータグループを作成してデータベースに紐付けし直す必要があります。

引用:パラメータグループの概要 - デフォルトおよびカスタムパラメータグループ

  1. 新しいパラメータグループを作成します。
  2. 必要なパラメータの設定を変更します。 パラメータグループ内のすべての DB エンジンパラメータが変更できるわけではありません。
  3. DB インスタンスまたは DB クラスターを変更して、新しいパラメータグループを関連付けます。

DBクラスターパラメータグループとDBインスタンスパラメータグループ

Amazon Auroraには、DBクラスターパラメータグループとDBインスタンスパラメータグループの2つのタイプがあります。
少々名称が長いので以降、DBクラスターPGとDBインスタンスPGと表記します。

Amazon Auroraは基本的にDBクラスターを作成し、その中に複数のデータベースインスタンスを作成します。
従って、DBクラスターPGとDBインスタンスPGは必ず意識しておく必要があります。
Amazon Auroraのリージョン別クラスターに紐づけるのがDBクラスターPG、ライターインスタンス・リーダーインスタンスに紐づけるのがDBインスタンスPGです。

docs.aws.amazon.com

DBクラスターPGとDBインスタンスPG

DBクラスターPGのパラメータは、DBクラスター内のすべてのデータベースインスタンスに適用されます。
DBインスタンスPGのパラメータは、紐づけたDBインスタンスにのみ適用されます。
DBインスタンスPGは、ライターインスタンスとリーダーインスタンスに個別に紐づけることができます。

パラメータグループのパラメータの優先順位

パラメータグループのパラメータは、上書きすることができます。
上書きの関係は、DBインスタンスPG > DBクラスターPG > デフォルトパラメータグループです。
以下の表にまとめます。

DBクラスターPG DBインスタンスPG 優先されるパラメータ
変更なし 変更なし デフォルト値
変更なし 変更あり DBインスタンスPG
変更あり 変更なし DBクラスターPG
変更あり 変更あり DBインスタンスPG

パラメータの適用タイミング

パラメータの優先順位は上述の通りですが、リアルタイムに優先順位が適用されるわけではありません。
例えば、上記のようにDBクラスターPGでパラメータをAに変更して、DBインスタンスPGでBに変更した場合、最終的なパラメータ値はBとなります。
この時、DBインスタンスPGでパラメータをデフォルトに戻した場合、最終的なパラメータ値はデフォルト値に戻ります。
DBクラスターPGで一回更新をかけるとパラメータ値がAになります。

従って、以下のことが言えます。

  • DBクラスターPGとDBインスタンスPGの優先度に基づいたパラメータの再計算は基本的にパラメータを更新した時にしか起きない
  • パラメータグループの更新や元に戻す時はDBクラスターPGとDBインスタンスPGの優先度に沿って行う必要がある

そして、このDBクラスターPGとDBインスタンスPGの優先度の話は、パラメータグループの静的および動的パラメータのルールとは別物です。
これら総合して考えると、パラメータ変更の際は、後述のSHOW VARIABLESを用いて確認することをお勧めします。

DBクラスターPGとDBインスタンスPGのパラメーターの比較

本記事執筆時点(2024.07.22)で、Amazon Aurora MySQL 3.05.2をDBクラスターPGとDBインスタンスPGのパラメーターを比較しました。
参考は以下のページです。

docs.aws.amazon.com

DBクラスターPGとDBインスタンスPGのパラメーターの違いは、以下の通りです。

  • DBインスタンスPGにあるパラメータは、全てDBクラスターPGにある
  • DBクラスターPGにしかないパラメータはある

DBクラスターPGにしかないパラメータを分類したのが以下の表です。
分類は私が個人で行ったので解釈違いがありましたらご容赦ください。

分類 パラメータ数
レプリケーションおよびバイナリログ 19
キャラクタセットとコレーション 9
セキュリティと認証 15
InnoDBの動作 29
その他のシステム設定 44

インスタンスをまたがる設定は、クラスターパラメータグループ側にあると言えます。
その昔私は、パラメータグループのパラメータの優先順位と、DBクラスターPGとDBインスタンスPGのパラメータの違いを理解していなかったので、パラメータを変える場合はとりあえず両方変えていました。
常に両方変更するのは効率的ではないので、皆様はこの点を意識してパラメータを変更してください。

実際に効いているパラメータの確認方法

パラメータグループは、デフォルト値から変更していない場合、値がハイフン(-)で表示されることがあります。
わかりやすい例を挙げると、文字コードの設定群がそれです。

デフォルト値が変更していないパラメータはハイフンの場合がある

ハイフンなので、文字コードが未設定なのかというとそういうわけではありません。
どちらかというと、上書きしていないのでAmazon Aurora MySQLのデフォルト値が適用されているということです。
これを確認するには実際にDBインスタンスに繋いで、SQLを実行する必要があります。

SHOW VARIABLES LIKE 'character_set_%';

実行結果はこちらです。
ハイフンでも実際にはパラメータが適用されていることがわかります。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+-------------------------------------------------------------------+
| Variable_name            | Value                                                             |
+--------------------------+-------------------------------------------------------------------+
| character_set_client     | utf8mb4                                                           |
| character_set_connection | utf8mb4                                                           |
| character_set_database   | utf8mb4                                                           |
| character_set_filesystem | binary                                                            |
| character_set_results    | utf8mb4                                                           |
| character_set_server     | utf8mb4                                                           |
| character_set_system     | utf8mb3                                                           |
| character_sets_dir       | /rdsdbbin/oscar-8.0.mysql_aurora.3.05.2.0.45906.0/share/charsets/ |
+--------------------------+-------------------------------------------------------------------+
8 rows in set (0.03 sec)

Amazon Aurora MySQL 3系の文字コードのデフォルト値はutf8mb4・utf8mb3である

前項で文字コードのパラメータを表示しました。
上記は、Amazon Aurora MySQL 3系のデフォルト値です。
以前あったlatin1がないのがわかります。

docs.aws.amazon.com

上記ページより引用します。

Aurora MySQL バージョン 3 のデフォルト文字セットは utf8mb4 です。 Aurora MySQL バージョン 2 のデフォルト文字セットは latin1 です。

character_set_systemだけがutf8mb3になっています。
character_set_systemは、 MySQL システム自身が内部で使用する文字コードです。
そして、utf8mb3はutf8の別名で、4バイトの絵文字などの一部の文字を除くほぼすべてのUnicode文字をサポートします。
以上のことから、個人的にはAmazon Aurora MySQL 3系では文字コードの設定をデフォルトのままでよいのではと思います。

パラメターグループをデフォルトからカスタムに変更するとDBインスタンス起動時に再起動が走るようになる

docs.aws.amazon.com

こちらのページから引用します。

カスタムパラメータグループを使用するように DB インスタンスを変更して、DB インスタンスを起動すると、RDS は起動プロセスの一環として DB インスタンスを自動的に再起動します。

デフォルトのパラメータグループからカスタムのパラメータグループに変更すると、DBインスタンス起動時に再起動が走るようになります。
まず、こちらがデフォルトパラメータグループの場合のDBインスタンスの起動時のイベントです。

デフォルトパラメータグループの場合のDBインスタンスの起動時のイベント

そして、こちらがカスタムパラメータグループにした場合のイベントです。

カスタムパラメータグループにした場合のイベント

起動後に再起動が走っているのがわかります。

DBインスタンスに対してなんらかの監視をしている場合、これを検知してしまうことが考えられます。
イベントに対して監視を入れているならば、この点に留意が必要な可能性があります。

性能に関するパラメータの多くは計算式である

パラメータグループにおいて、性能に関するパラメータは計算式で設定されていることが多いです。
例えば、innodb_buffer_pool_sizeは、インスタンスのメモリサイズに応じるように設定されています。

{DBInstanceClassMemory*3/4}

従って、性能問題が生じた場合は、チューニングよりもインスタンスタイプの変更をした方が効果的な可能性があります。
私は過去オンプレミスの知識ベースでチューニングをしたことがありますが、思ったよりも効果がなかったことがあります。
パラメータグループに設定されている計算式は、AWSが最適な値を提供しているということなので、チューニングは慎重に行うべきだと思います。

兼安 聡(執筆記事の一覧)

アプリケーションサービス部 DS3課所属
2024 Japan AWS Top Engineers (Database)
2024 Japan AWS All Certifications Engineers
認定スクラムマスター
広島在住です。今日も明日も修行中です。