[PR] あなたが Kindle で読みたいその本、Kindle に対応したら Twitter でお知らせします。

Aurora の Fast DDL を 1500 万レコードで検証してみた

Posted on

Amazon Aurora 1.12 がリリースされました。注目すべきは Fast DDL です。

Fast DDL とは大規模なデータベースでも DDL が高速に行えるという機能です。この機能を待ちわびていたので、さっそく検証してみました。

検証に使ったインスタンスは db.r3.large で、対象のテーブルは 1500 万以上のレコードがあります。このテーブルには本番環境に近いデータが入っています。

mysql> select count(*) from xxxxxx;
+----------+
| count(*) |
+----------+
| 15441969 |
+----------+
1 row in set (12.23 sec)

ALTER TABLE を流してみる

まずは Fast DDL がオフの状態で計測してみます。 Fast DDL はまだ Lab Mode でしか使えないので、オンオフは aurora_lab_mode で確認できます。

mysql> show variables like 'aurora_lab_mode';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| aurora_lab_mode | OFF   |
+-----------------+-------+
1 row in set (0.01 sec)

mysql> alter table xxxxxx add column migration1 int(10);
Query OK, 0 rows affected (8 min 26.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

8 分 26 秒で完了しました。これだけ時間がかかるとオンラインで DDL を流すのは厳しいですね。

次に Parameter Group で aurora_lab_mode をオンにして Fast DDL を試してみます。

mysql> show variables like 'aurora_lab_mode';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| aurora_lab_mode | ON    |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> alter table xxxxxx add column migration2 int(10);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

なんと 0.15 秒で終わりました! 驚異的な速さです。

The database updates the INFORMATION_SCHEMA system table with the new schema. In addition, the database timestamps the operation, records the old schema into a new system table (Schema Version Table), and propagates this change to read replicas.

このような説明があるので、実際のテーブルには同期的に一切変更していないようです。

Fast DDL が効かないケース

公式フォーラムにも書いてありますが、Fast DDL が効くのはいくつかの条件があります。

Fast DDL is currently only supported for adding a nullable column, without a default value, at the end of a table.

NULL を許容するデフォルト値のないカラムがテーブルの最後に追加されるときです。なので、インデックスの追加や既存カラムの間にカラムを追加する場合は効きません(実際に試しましたが Fast DDL がオフの状態とほぼ同じでした)。

まとめ

まだ制限があるものの、Fast DDL は非常に期待できる機能です。 Lab Mode から卒業したら Aurora の強力な差別化ポイントになるでしょう。

RDS for MySQL にできて Aurora にできない 2 つのこと」にも書きましたが、Aurora はリードレプリカに書き込みできないという欠点がありましたが、Fast DDL はそれを十分にカバーしてくれそうです。