ちょっと話題の記事

Amazon Aurora MySQL 3 (MySQL 8.0 互換) がリリースされました。

新しい Amazon Aurora 3 クラスタ を起動、MySQL 8で利用可能になったウィンドウ関数を含むSQLを試してみました。
2021.11.20

AWSチームのすずきです。

2021年11月18日、MySQL 8.0 と互換性を持つ Amazon Aurora 3 がリリースされました。

今回、DBエンジンバージョン「8.0.mysql_aurora.3.01.0」の Auroraクラスタを東京リージョンで起動、 新しくサポートされたウィンドウ関数を利用したSQLの実行を試す機会がありましたので、紹介させていただきます。

データベース作成

バージョン指定

Aurora MySQL 3.01.0 (Compatible with MySQL 8.0.23) の選択が可能になりました。

DBインスタンスクラス

最も廉価に利用できる「db.t4g.medium」を利用しました。

「db.t3.small」は、Auraora 3ではサポート外となった模様です。

メモリ最適化クラスでは、「r4」「r5」「r6g」のインスタンスクラスが指定可能でした。

パラメーターグループ

パラメーターグループの変更を行う場合、「aurora-mysql8.0」ファミリーを指定して、パラメータグループ、DB クラスターのパラメータグループを作成します。

確認

「8.0.mysql_aurora.3.01.0」のDBインスタンスを起動する事ができました。

動作確認

MySQL 8.0 でサポートされた Windows関数を含むSQLの利用が可能になりました。

  • 月別の投稿実績ベスト3
SELECT
    d.user_nicename,
    c.post_count,
    c.post_month,
    c.monthly_rank,
    c.monthly_dense_rank
FROM
    (
        SELECT
            b.post_author,
            b.post_count,
            b.post_month,
            rank() over(partition BY b.post_month ORDER BY b.post_count DESC) AS monthly_rank,
            dense_rank() over(partition BY b.post_month ORDER BY b.post_count DESC) AS monthly_dense_rank
        FROM
            (
                SELECT
                    a.post_author,
                    COUNT(1) AS post_count,
                    DATE_FORMAT(a.post_date, '%Y-%m') AS post_month
                FROM
                    wp_posts a
                WHERE
                    a.post_type = 'post'
                AND post_status = 'publish'
                AND a.post_date >= date_add(date_add(last_day(NOW()), INTERVAL 1 DAY), INTERVAL - 4 MONTH)
                AND a.post_date < date_add(date_add(last_day(NOW()), INTERVAL 1 DAY), INTERVAL - 1 MONTH)
                GROUP BY
                    a.post_author,
                    DATE_FORMAT(a.post_date, '%Y-%m')
            ) b
    ) c,
    wp_users d
WHERE
    c.post_author = d.ID
AND c.monthly_rank <= 3
+-----------------+------------+------------+--------------+--------------------+
| user_nicename   | post_count | post_month | monthly_rank | monthly_dense_rank |
+-----------------+------------+------------+--------------+--------------------+
| iwasa-takahito  |         31 | 2021-08    |            1 |                  1 |
| wakatsuki-ryuta |         31 | 2021-08    |            1 |                  1 |
| sin             |         17 | 2021-08    |            3 |                  2 |
| iwasa-takahito  |         32 | 2021-09    |            1 |                  1 |
| wakatsuki-ryuta |         30 | 2021-09    |            2 |                  2 |
| kim-jaewook     |         12 | 2021-09    |            3 |                  3 |
| iwasa-takahito  |         31 | 2021-10    |            1 |                  1 |
| wakatsuki-ryuta |         31 | 2021-10    |            1 |                  1 |
| mori-ryosuke    |         19 | 2021-10    |            3 |                  2 |
+-----------------+------------+------------+--------------+--------------------+
9 rows in set (0.00 sec)

まとめ

MySQL8 でサポートされた機能を必須とするため、これまで Amazon Aurora の採用のネックとなっていた場合、新しい Amazon Aurora MySQL 3 をぜひお試しください。

また、Instant DDL、Common table expressions (CTEs)、Improved parallel query support、New index types など Aurora3で利用可能になった新機能や、改善されたバイナリログレプリケーションについても 追って評価を試みてみたいと思います。