📙

Amazon Aurora MySQL v1(5.6 互換)→ v3(8.0 互換)移行を計画する(4)AWS 公式ドキュメントを読む(2)

2022/02/26に公開

これは

の続きです。

今回は AWS 公式の Aurora 関連ドキュメントのうち、

を中心に取り上げてみます。

「Aurora MySQL バージョン 3 は MYSQL 8.0 との互換性があります。」を読む

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.MySQL80.html

より拾っていきます。

ベースとなる MySQL のバージョンアップ(5.6 → 8.0)による差異

インスタント DDL をサポート

MySQL 8.0 では新たにインスタント DDL がサポートされました。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.mysql80-instant-ddl

これに伴い、Aurora MySQL v1 で提供されていた(ラボモードの)高速 DDL が廃止されました。

カラムやインデックスの追加・変更・削除など、DDL の実行時の所要時間とロックの有無などが変わる可能性があります。

Administrator権限の分割

MySQL 8.0 では以前のバージョンと比べて管理者権限が細分化されています。

Aurora MySQL v1 で実行していた SQL 文などが権限エラーになる場合は、実行に必要な権限を確認してください。

また、MySQL 8.0 ではロールベースの権限管理が導入されています。

https://dev.mysql.com/doc/refman/8.0/ja/roles.html

これにあわせてrds_superuser_roleという管理者権限(特権)を持つロールが追加されています。

クエリキャッシュの削除

クエリキャッシュは I/O の低減に寄与する一方で並列スレッドのロック競合を引き起こすなどの問題があり、MySQL 5.6 の時点ですでに非推奨になっていましたが、MySQL 8.0 で廃止されました。

これに合わせて、Aurora MySQL v3 でも Aurora 独自仕様のクエリキャッシュが廃止されました。

Aurora MySQL v1 でクエリキャッシュを使用していた場合は、パフォーマンスの変化に気を付ける必要があります。

ハッシュ結合(Hash join)を実装

MySQL 8.0 に ハッシュ結合(Hash join)が実装され、Aurora 独自仕様のハッシュ結合が廃止されました。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-mysql-parallel-query.html#aurora-mysql-parallel-query-enabling-hash-join

あわせて、ハッシュ結合の有効化・無効化の指定方法が変わりました。

デフォルト文字セットがlatin1からutf8mb4に変更

https://dev.mysql.com/doc/refman/8.0/ja/charset-unicode-utf8mb4.html

あわせて、デフォルトの照合順序(Collation)も変更されています。

https://dev.mysql.com/doc/refman/8.0/ja/charset-charsets.html

地味ですが、文字セットと照合順序は

  • 文字化け
  • 文字の照合問題(どの文字を同一と見做すか?)
  • パフォーマンス

に関係します。

以前紹介した サイボウズのブログ記事 でもutf8mb4のデフォルト照合順序が変わった問題について触れていました。

パフォーマンス面では、

https://yoku0825.blogspot.com/2018/12/utf8mb40900aici.html

のような違いがあります。

参照専用(Reader)インスタンスでのCREATE TEMPORARY TABLE (AS SELECT)挙動変化

innodb_read_only1のときに InnoDB ストレージエンジンでテンポラリテーブルが作成できなくなったのに伴い、Reader インスタンスでCREATE TEMPORARY TABLE … ENGINE=InnoDBを実行する場合は SQL モードNO_ENGINE_SUBSTITUTIONを無効にする必要があります。

ただしAS SELECT付きで実行する場合は SQL モードにかかわらずエラーになります。

そのため、Reader インスタンスでCREATE TEMPORARY TABLEを実行する場合はENGINE=InnoDBを削除しておくのが良さそうです。

内部テンポラリテーブル変更

MyISAM ストレージエンジンが廃止され、アーキテクチャが変わりました。

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

本家 MySQL 8.0 と Aurora MySQL v3 の相違点

初期リリースは MySQL 8.0.26 ベースだが、一部 8.0.26 からバックポートしているキーワードが存在

「Master」「Slave」などの用語の読み替えがバックポートされています。

Percona XtraBackup ツールからの物理バックアップ復元は未対応

今後のマイナーバージョンでサポート予定です。

パラメータinnodb_flush_log_at_trx_commit変更不可に

1で固定になりました。

一部ステータス変数が非適応

UNDO テーブルスペースの処理方法相違

そもそも本家 MySQL と Aurora ではストレージ層のアーキテクチャが異なりますので、本家 MySQL 8.0 の UNDO テーブルスペース関連機能は使えません。

  • Aurora MySQL は名前付きテーブルスペースをサポートしていません。
  • innodb_undo_log_truncate構成設定はオフになっており、オンにできません。Aurora には、ストレージスペースを再利用するための独自のメカニズムがあります。
  • Aurora MySQL にはCREATE UNDO TABLESPACEALTER UNDO TABLESPACE ... SET INACTIVE、およびDROP UNDO TABLESPACEステートメントがありません。
  • Aurora は、UNDO テーブルスペースの数を自動的に設定し、それらのテーブルスペースを自動的に管理します。

プラグインの設定変更不可

ドキュメントストア向けの X プラグイン、クエリリライトプラグインなどが使えません。

Aurora 独自機能の変更点

重複する点は省略します。

Aurora 並列クエリの最適化対象が拡大

LOB 系カラムやパーティショニングされたテーブル、HAVING句の中での集計関数に対応しました。

バックトラック未サポート

現時点ではバックトラックを使用中のクラスタで作成したスナップショットからの復元ができません。

今後のマイナーバージョンでサポート予定です。

Aurora Serverless v1 クラスタ非サポート

2022/04/21 GA の Aurora Serverless v2 クラスタでサポートされています(バージョン 3.02.0 以降)。

mysql.lambda_asyncストアドプロシージャ削除

非同期関数lambda_asyncで代替します。

パラメータグループ内のパラメータ変更

lower_case_table_namesパラメータの値はクラスタ作成時の指定で固定されるので、デフォルト値以外に変更する場合はアップグレード前にカスタムパラメータグループを作成・設定します。

その他の項目の変更については、前掲のこちら ↓ を確認してください。

その他

対応インスタンスクラスの変更があり、db.r3・db.r4・t3.small・t2 が使用できなくなりました。

まとめ

  • Aurora MySQL v3 は v1・v2 と比べると独自仕様の実装が減る一方、本家 MySQL からの実装をそのまま利用する機能が増えた
    • インスタント DDL・ハッシュ結合など
  • とはいえ本家 MySQL 8.0 との相違点はある
  • クエリキャッシュの削除や、文字セット・照合順序など細部の違いが動作やパフォーマンスに影響を与える可能性がある
  • 現状では未サポートの Aurora 独自機能がある
    • バックトラック・Serverless など

次回からは Oracle 公式の MySQL 関連ドキュメントを中心に見ていく予定です。

に続きます。

GitHubで編集を提案

Discussion