Chapter 05

調査(1)設定パラメータ関連の変更点

hmatsu47
hmatsu47
2022.04.14に更新

この章について

著者が調査した v1 → v3 の変更点のうち、主に Aurora MySQL クラスタ・インスタンス設定(パラメータグループ等)に関するものを記します。

なお、サーバ設定(サーバ変数)をアプリケーションから参照・上書きしている場合は、アプリケーションの改修対象になる可能性があります。

AWS 公式の Aurora 関連ドキュメントより

v1 → v2 でengine属性がauroraからaurora-mysql

マネジメントコンソールだけ使っている場合には関係ないのですが、CLI や SDK などを使って API を呼び出すコードを書いている場合、パラメータとして指定する属性(engine)が変わるので修正が必要になります。

パラメータグループ

Aurora MySQL v1 と v2、v3 でクラスタとデータベースのパラメータグループが違います。

カスタムパラメータグループを使っている場合は、アップグレード前にあらかじめ v3 用のカスタムパラメータグループを作っておきます。

CLI や SDK などを使って API を呼び出すコードを書いている場合、パラメータ指定も変える必要があります。

MySQL 5.6 と 8.0 ではサーバのパラメータにかなり違いがあり、Aurora のパラメータグループの項目や初期値も違います。さらに同じパラメータ名のengine-defaultが指す値が v1 と v3 で異なるケースなど、パラメータグループの差分が表示されなくても値の書き換えが必要な場合があります。

Oracle 公式の MySQL 関連ドキュメントより

パラメータ差分は行数が多いのでこちらを参照してください。

https://github.com/hmatsu47/aurora_mysql1to3diff/blob/main/aurora-mysql1_3_param_diff.csv

実際に使用しているパラメータグループ(クラスタ・DB)と比較して、対応が必要な点を見付けます。

対応が必要になりそうな変更点

innodb_strict_modeのデフォルトが厳密モードに

https://dev.mysql.com/doc/refman/8.0/ja/innodb-parameters.html#sysvar_innodb_strict_mode

Aurora MySQL v2(MySQL 5.7)の時点でデフォルトが変わっています。

一部の SQL 文の実行で、従来は警告(Warning)で済ませていたのをエラーで止める動作に変わりました。多くの場合は問題にならないはずですが、列数の多いテーブルをCREATEALTERする必要があるなど、OFFにせざるを得ないケースもあります。

innodb_autoinc_lock_modeのデフォルトが1から2

AUTO_INCREMENT 生成時のロックモードです。

https://dev.mysql.com/doc/refman/8.0/ja/innodb-parameters.html#sysvar_innodb_autoinc_lock_mode

2のほうが性能上有利なのですが、例えば MySQL Connector/J の rewriteBatchedStatementsオプション を使ったバッチINSERTLAST_INSERT_ID() を組み合わせた処理を行っているようなケースでは、動作の問題が生じる可能性があるので従来と同じ1に戻します。

tx_isolationtransaction-isolation

これはパラメータグループというよりも、アプリケーションから DB に接続する部分の実装やライブラリのオプション設定に関わる問題ですが、以前触れた サイボウズのブログ記事 ではこの変更の影響を受けていました。

internal_tmp_mem_storage_engineの追加(内部テンポラリテーブル変更)

内部テンポラリテーブルでは、MyISAM ストレージエンジンが廃止されアーキテクチャが変わりました。

動作調整のためにinternal_tmp_mem_storage_engineパラメータが追加されました。

特に Aurora の Reader インスタンスでは設定値を超える容量の内部テンポラリテーブルを作ることができないため、設定値のチューニングに注意が必要です。

https://aws.amazon.com/jp/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/