[アップデート] 新しいLTSバージョンであるAmazon Aurora MySQL 3.10がリリースされました
新しいLTSバージョンが早く来てほしい
こんにちは、のんピ(@non____97)です。
皆さんは新しいAurora MySQL 3のLTSバージョンが早く来てほしいと思ったことはありますか? 私はあります。
Aurora MySQL 3のLTSバージョンは3.0.4です。2023/7/31にリリースされたMySQL 8.0.32互換のものです。リリースから2年近く経ち、機能的にもサポート期限的にも早く新しいLTSバージョンに移行したいと考えられた方も多いのではないでしょうか。
今回、 新しいLTSバージョンであるAmazon Aurora MySQL 3.10がリリースされました。
LTSリリースであるため少なくとも3年もしくはメジャーバージョンの標準サポート期間が終了するまで同じマイナーバージョンを使用することが可能です。
パッチレベルでは新しい機能は含まれないため「安定稼働している中に機能を追加されることで不具合が発生することを避けたい」という場合にもマッチします。
Aurora MySQLのサポート期限の整理
Aurora MySQLのサポート期限を整理します。
Aurora MySQL version | Aurora MySQL release date | Aurora MySQL end of standard support date |
---|---|---|
3.10 (Compatible with Community MySQL 8.0.42) (LTS) | July 31, 2025 | April 30, 2028 |
3.09 (Compatible with Community MySQL 8.0.40) | May 14, 2025 | May 14, 2026 |
3.08 (Compatible with Community MySQL 8.0.39) | November 18, 2024 | March 31, 2026 |
3.07 (Compatible with Community MySQL 8.0.36) | June 4, 2024 | August 31, 2025 |
3.06 (Compatible with Community MySQL 8.0.34) | March 7, 2024 | August 31, 2025 |
3.05 (Compatible with Community MySQL 8.0.32) | October 25, 2023 | August 31, 2025 |
3.04 (Compatible with Community MySQL 8.0.28) (LTS) | July 31, 2023 | October 31, 2026 |
抜粋 : Release calendars for Amazon Aurora MySQL - Amazon Aurora
Aurora MySQL 3.10.0の標準サポートは2028/4/30までとなっていますね。
Aurora MySQL 3の標準サポート期限が2028/4/30とAurora MySQL 3.10.0と一致しているので、Aurora MySQL 3.10.0がAurora MySQL 3の最後のLTSバージョンということになりそうです。
メジャーバージョンレベルでは以下のようにAWS CLIでも確認できます。
> aws rds describe-db-major-engine-versions --engine aurora-mysql
{
"DBMajorEngineVersions": [
{
"Engine": "aurora-mysql",
"MajorEngineVersion": "5.7",
"SupportedEngineLifecycles": [
{
"LifecycleSupportName": "open-source-rds-standard-support",
"LifecycleSupportStartDate": "2018-02-06T00:00:00+00:00",
"LifecycleSupportEndDate": "2024-10-31T23:59:59.999000+00:00"
},
{
"LifecycleSupportName": "open-source-rds-extended-support",
"LifecycleSupportStartDate": "2024-11-01T00:00:00+00:00",
"LifecycleSupportEndDate": "2027-02-28T23:59:59.999000+00:00"
}
]
},
{
"Engine": "aurora-mysql",
"MajorEngineVersion": "8.0",
"SupportedEngineLifecycles": [
{
"LifecycleSupportName": "open-source-rds-standard-support",
"LifecycleSupportStartDate": "2021-11-18T00:00:00+00:00",
"LifecycleSupportEndDate": "2028-04-30T23:59:59.999000+00:00"
},
{
"LifecycleSupportName": "open-source-rds-extended-support",
"LifecycleSupportStartDate": "2028-05-01T00:00:00+00:00",
"LifecycleSupportEndDate": "2029-07-31T23:59:59.999000+00:00"
}
]
}
]
}
Aurora MySQL 3.04からAurora MySQL 3.10までの主な機能追加
Aurora MySQL 3.04からAurora MySQL 3.10までの主な機能追加を確認します。
詳細はAWS公式ドキュメントをご覧ください。
3.05
- Aurora MySQLデータベースクラスターのデータをSSE-KMSで暗号化されたAmazon S3バケット内のテキストファイルへの保存をサポート
- タイムゾーン情報の現在のバージョンを示す
aurora_tmz_version
グローバルステータス変数を追加
3.06
- Amazon Bedrock統合サポートを追加
accept
、aws_bedrock_invoke_model
、aws_sagemaker_invoke_endpoint
等の予約キーワード追加- 複数のセカンダリインデックスを持つ大きなテーブルのトランザクションをレプリケートする際のバイナリログレプリカのパフォーマンスの向上
- ストアドプロシージャ
mysql.rds_set_read_only
を追加 - ストアドプロシージャ
mysql.rds_set_binlog_source_ssl
を追加 - Truncating Undo Tablespacesの追加
3.07
- FIPS検証済み暗号化サポートを追加
- バイナリログレプリケーション用特権チェックユーザー
rdsrepladmin_priv_checks_user
を追加
3.08
- InnoDB パージプロセスをモニタリング用に以下CloudWatchメトリクスを追加
- PurgeBoundary
- PurgeFinishedPoint
- TruncateFinishedPoint
- 最も古いアクティブな実行中トランザクションの経過時間である
TransactionAgeMaximum
CloudWatchメトリクスの追加 - OOM回避のために以下CloudWatchメトリクスが追加
- AuroraMillisecondsSpentInOomRecovery
- AuroraNumOomRecoverySuccessful
- AuroraNumOomRecoveryTriggered
- OOM回避のため以下CloudWatchメトリクスを実行合計から増分に変更
- AuroraMemoryNumDeclinedSqlTotal
- AuroraMemoryNumKillConnTotal
- AuroraMemoryNumKillQueryTotal
- 内部一時テーブルで使用されるメモリ量を示す以下グローバルステータス変数を追加
- aurora_temptable_ram_allocation
- aurora_temptable_max_ram_allocation
- サーバーがメモリからトレースを消去する前に、オプティマイザトレースをエラーログに出力するシステム変数
aurora_optimizer_trace_print_before_purge
の追加
3.09
- Aurora MySQL Global Databaseにてセカンダリリーダーインスタンスが予期しないイベント中に起動を完了し、読み取りリクエストを処理できるように変更
- Aurora MySQL Global Databaseのクロスリージョンスイッチオーバー中のWriterのダウンタイムを通常1分未満に短縮
3.10
- バイナリログレプリカのメモリ内リレーログキャッシュのサポートが拡張
- 最大ストレージ容量を 128 TiB から 256 TiB に増加
Aurora MySQL 3.10をサポートしているDBインスタンスクラス
Aurora MySQL 3.10をサポートしているDBインスタンスクラスは以下のとおりです。
- db.serverless
- db.x2g.large - db.x2g.16xlarge
- db.r8g.large - db.r8g.48xlarge
- db.r7g.large - db.r7g.16xlarge
- db.r7i.large - db.r7i.48xlarge
- db.r6g.large - db.r6g.16xlarge
- db.r6i.large - db.r6i.32xlarge
- db.r5.large - db.r5.24xlarge
- db.t4g.medium - db.t4g.large
- db.t3.medium - db.t3.large
参考 : Supported DB engines for DB instance classes - Amazon Aurora
特にdb.r8gを使用できるようになったのは嬉しいです。今までLTS版である3.0.4を使用している場合はdb.r7gまでしか使用できませんでした。
Aurora MySQL 3.10.0にアップグレードすることで、インフラ面の性能向上の恩恵を受けることができそうです。
Aurora MySQL 3.10のプロパティ
Aurora MySQL 3.10のプロパティも確認しておきます。
> aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 8.0.mysql_aurora.3.10.0
{
"DBEngineVersions": [
{
"Engine": "aurora-mysql",
"EngineVersion": "8.0.mysql_aurora.3.10.0",
"DBParameterGroupFamily": "aurora-mysql8.0",
"DBEngineDescription": "Aurora MySQL",
"DBEngineVersionDescription": "Aurora MySQL 3.10.0 (compatible with MySQL 8.0.42)",
"ValidUpgradeTarget": [],
"ExportableLogTypes": [
"audit",
"error",
"general",
"iam-db-auth-error",
"instance",
"slowquery"
],
"SupportsLogExportsToCloudwatchLogs": true,
"SupportsReadReplica": false,
"SupportedEngineModes": [
"provisioned"
],
"SupportedFeatureNames": [
"Bedrock"
],
"Status": "available",
"SupportsParallelQuery": true,
"SupportsGlobalDatabases": true,
"MajorEngineVersion": "8.0",
"SupportsBabelfish": false,
"SupportsLimitlessDatabase": false,
"SupportsCertificateRotationWithoutRestart": true,
"SupportedCACertificateIdentifiers": [
"rds-ca-ecc384-g1",
"rds-ca-rsa4096-g1",
"rds-ca-rsa2048-g1"
],
"SupportsLocalWriteForwarding": true,
"SupportsIntegrations": true,
"ServerlessV2FeaturesSupport": {
"MinCapacity": 0.0,
"MaxCapacity": 256.0
}
}
]
}
触ってみた
Aurora MySQL 3.4.0の場合
Aurora MySQL 3系ではSELECT COUNT(*)
が遅いという問題が知られています。
アップグレードによって改善されたのか確認してみます。
まずは、Aurora MySQL 3.0.4の場合です。
$ mysql -h database-304.cluster-cicjym7lykmq.us-east-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 51
Server version: 8.0.28 8a6fbbbd
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.28 |
+-----------+
1 row in set (0.001 sec)
MySQL [(none)]> SELECT aurora_version();
+------------------+
| aurora_version() |
+------------------+
| 3.04.4 |
+------------------+
1 row in set (0.001 sec)
bugs.mysqlで紹介されている手順で試します。
MySQL [non____97_db]> DROP SCHEMA IF EXISTS example;
Query OK, 0 rows affected (0.007 sec)
MySQL [non____97_db]> CREATE SCHEMA example;
Query OK, 1 row affected (0.002 sec)
MySQL [non____97_db]> USE example;
Database changed
MySQL [example]>
MySQL [example]> DROP TABLE IF EXISTS table1;
Query OK, 0 rows affected, 1 warning (0.001 sec)
MySQL [example]> CREATE TABLE table1
-> (
-> id INT AUTO_INCREMENT,
-> col_idx VARCHAR(28),
-> col_data LONGTEXT,
-> PRIMARY KEY (id),
-> KEY `idx` (`col_idx`)
-> ) CHARSET = utf8mb4
-> COLLATE = utf8mb4_general_ci;
Query OK, 0 rows affected (0.020 sec)
MySQL [example]>
MySQL [example]> DROP PROCEDURE IF EXISTS fill_data;
Query OK, 0 rows affected, 1 warning (0.000 sec)
MySQL [example]> DELIMITER //
MySQL [example]>
MySQL [example]> CREATE PROCEDURE fill_data()
-> BEGIN
-> DECLARE i INT DEFAULT 0;
-> WHILE i < 100000
-> DO
-> INSERT INTO table1 (col_idx, col_data)
-> VALUES (REPEAT('a', 28),
-> REPEAT('a', 5000));
-> SET i = i + 1;
-> END WHILE;
-> END
-> //
Query OK, 0 rows affected (0.003 sec)
MySQL [example]> DELIMITER ;
MySQL [example]> SET AUTOCOMMIT = true;
Query OK, 0 rows affected (0.000 sec)
MySQL [example]> call fill_data();
Query OK, 1 row affected (9.393 sec)
MySQL [example]> call fill_data();
Query OK, 1 row affected (9.564 sec)
MySQL [example]> call fill_data();
Query OK, 1 row affected (9.607 sec)
MySQL [example]> call fill_data();
Query OK, 1 row affected (10.555 sec)
MySQL [example]> call fill_data();
Query OK, 1 row affected (9.550 sec)
MySQL [example]> SELECT COUNT(*) FROM table1;
+----------+
| COUNT(*) |
+----------+
| 500000 |
+----------+
1 row in set (0.087 sec)
0.087秒と特に遅いとは感じないですね。
Aurora MySQL 3.10.0の場合
Aurora MySQL DBクラスターを3.0.4から3.10.0にインプレースアップグレードしました。
ログを確認すると、以下のように出力されていることからZDP(zero-downtime patching)でアップグレードされたことが分かります。
Attempt to upgrade the database instance 'database-304-instance-1' with zero downtime finished. The process took 14357 ms, 7 connections preserved, 0 connections dropped. See the database error log for details.
ZDPについては以下AWS公式ドキュメントをご覧ください。
既存のセッションは維持されたままでした。バージョンを確認します。
MySQL [example]> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.42 |
+-----------+
1 row in set (0.001 sec)
MySQL [example]> SELECT aurora_version();
+------------------+
| aurora_version() |
+------------------+
| 3.10.0 |
+------------------+
1 row in set (0.000 sec)
正常にアップグレードできていますね。
それではSELECT COUNT(*)
を実行します。
MySQL [example]> SELECT COUNT(*) FROM table1;
+----------+
| COUNT(*) |
+----------+
| 500000 |
+----------+
1 row in set (0.375 sec)
MySQL [example]> SELECT COUNT(*) FROM table1;
+----------+
| COUNT(*) |
+----------+
| 500000 |
+----------+
1 row in set (0.078 sec)
MySQL [example]> SELECT COUNT(*) FROM table1;
+----------+
| COUNT(*) |
+----------+
| 500000 |
+----------+
1 row in set (0.098 sec)
MySQL [example]> SELECT COUNT(*) FROM table1;
+----------+
| COUNT(*) |
+----------+
| 500000 |
+----------+
1 row in set (0.081 sec)
一回だけ遅かったですが、それ以降は0.1秒未満で安定していました。
早めにLTSバージョンにアップグレードの計画を立てよう
新しいLTSバージョンであるAmazon Aurora MySQL 3.10のリリースを紹介しました。
早めにLTSバージョンにアップグレードの計画を立てましょう。
アップグレードする際は以下AWS公式ドキュメントが参考になります。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!