2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

東京リージョンにやってきた MySQL HeatWave on AWS を試す (3) バックアップをリストアしてサイズを変えてみる編

Last updated at Posted at 2023-07-24

こちらの記事の続きです。

現状、MySQL HeatWave on AWS のシェイプサイズや HeatWave Cluster 構成を変えるには、(1) に記したとおりバックアップからのリストアかダンプデータのインポートが必要です。

今回、実際にバックアップからのリストアにあわせてシェイプサイズや HeatWave Cluster 構成を変更し、(2) と同じクエリの所要時間を比較してみました。

2023/7/25 時点の情報です。
今後、画面構成や手順、結果などが変わる可能性があります。

2023/9/9 追記:
2023/8/8 のリリースで MySQL DB のストレージサイズをオンライン拡張できるようになりました。
https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-increase-dbsystem-storage.html#GUID-F2BF290C-1F9C-4B66-A730-44F7B46FDCC0

バックアップをリストアする

マネージドサービスですので手順は簡単です。

一覧から対象バックアップを選択

image.png
「State」 が Active なバックアップを選択して 「Restore Backup」 をクリックします。

リストア先の MySQL DB を設定

画面右側に設定項目が表示されるので入力・選択していきます。

新規の MySQL DB を作成する場合と同じです。

既存の MySQL DB・HeatWave Cluster とは別に作成されます。

image.png
image.png
「Next」 で進みます。

HeatWave Cluster を設定

こちらも新規作成と同様です。
image.png
「Restore」 でリストア開始です。

しばらく待って 「State」「HeatWave State」 が Active になったら作成完了です。

私のアカウントの初期状態では、HeatWave.16GB のノードは合計 8 個までに制限されていました。
これ以上増やす場合は申請が必要なようです。
image.png

リストアしたデータでクエリを実行する

HeatWave 無効状態で実行

まずはSET SESSION use_secondary_engine=OFF;で HeatWave を無効にして試します。

mysql> USE tpch;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SET SESSION use_secondary_engine=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql>  SELECT
    ->      l_returnflag,
    ->      l_linestatus,
    ->      SUM(l_quantity) AS sum_qty,
    ->      SUM(l_extendedprice) AS sum_base_price,
    ->      SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
    ->      SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
    ->      AVG(l_quantity) AS avg_qty,
    ->      AVG(l_extendedprice) AS avg_price,
    ->      AVG(l_discount) AS avg_disc,
    ->      COUNT(*) AS count_order
    ->  FROM
    ->      lineitem
    ->  WHERE
    ->      l_shipdate <= DATE '1998-12-01' - INTERVAL '90' DAY
    ->  GROUP BY l_returnflag , l_linestatus
    ->  ORDER BY l_returnflag , l_linestatus;
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| l_returnflag | l_linestatus | sum_qty     | sum_base_price  | sum_disc_price    | sum_charge          | avg_qty   | avg_price    | avg_disc | count_order |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| A            | F            | 37734107.00 |  56586554400.73 |  53758257134.8700 |  55909065222.827692 | 25.522006 | 38273.129735 | 0.049985 |     1478493 |
| N            | F            |   991417.00 |   1487504710.38 |   1413082168.0541 |   1469649223.194375 | 25.516472 | 38284.467761 | 0.050093 |       38854 |
| N            | O            | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502227 | 38249.117989 | 0.049997 |     2920374 |
| R            | F            | 37719753.00 |  56568041380.90 |  53741292684.6040 |  55889619119.831932 | 25.505794 | 38250.854626 | 0.050009 |     1478870 |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
4 rows in set (14.91 sec)

リストア後 1 回目はバッファプールに載っていない状態なので結果を無視し、その後の 5 回中最大値・最小値を除く 3 回分を平均して結果を出してみます(結果は後ほどまとめて記載)。

HeatWave 有効状態で実行

続いてSET SESSION use_secondary_engine=ON;で HeatWave を有効にして試します。

mysql> SET SESSION use_secondary_engine=ON;
Query OK, 0 rows affected (0.00 sec)

mysql>  SELECT
    ->      l_returnflag,
    ->      l_linestatus,
    ->      SUM(l_quantity) AS sum_qty,
    ->      SUM(l_extendedprice) AS sum_base_price,
    ->      SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
    ->      SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
    ->      AVG(l_quantity) AS avg_qty,
    ->      AVG(l_extendedprice) AS avg_price,
    ->      AVG(l_discount) AS avg_disc,
    ->      COUNT(*) AS count_order
    ->  FROM
    ->      lineitem
    ->  WHERE
    ->      l_shipdate <= DATE '1998-12-01' - INTERVAL '90' DAY
    ->  GROUP BY l_returnflag , l_linestatus
    ->  ORDER BY l_returnflag , l_linestatus;
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| l_returnflag | l_linestatus | sum_qty     | sum_base_price  | sum_disc_price    | sum_charge          | avg_qty   | avg_price    | avg_disc | count_order |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| A            | F            | 37734107.00 |  56586554400.73 |  53758257134.8700 |  55909065222.827692 | 25.522006 | 38273.129735 | 0.049985 |     1478493 |
| N            | F            |   991417.00 |   1487504710.38 |   1413082168.0541 |   1469649223.194375 | 25.516472 | 38284.467761 | 0.050093 |       38854 |
| N            | O            | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502227 | 38249.117989 | 0.049997 |     2920374 |
| R            | F            | 37719753.00 |  56568041380.90 |  53741292684.6040 |  55889619119.831932 | 25.505794 | 38250.854626 | 0.050009 |     1478870 |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
4 rows in set (12.74 sec)

あれ?速くなりませんね?

念のため、テーブルにセカンダリエンジンを指定してみます。

mysql>  ALTER TABLE tpch.customer SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.lineitem SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.nation SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.orders SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.part SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.partsupp SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.region SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.
mysql>  ALTER TABLE tpch.supplier SECONDARY_ENGINE=RAPID;
ERROR 3889 (HY000): Secondary engine operation failed. Table already has a secondary engine defined.

全てのテーブルで実行するまでもありませんでしたが、こちらは「すでに指定されている」状態でした。

HeatWave へのデータロードは…?

mysql>  ALTER TABLE tpch.customer SECONDARY_LOAD;
Query OK, 0 rows affected (2.02 sec)

mysql>  ALTER TABLE tpch.lineitem SECONDARY_LOAD;
Query OK, 0 rows affected (38.47 sec)

mysql>  ALTER TABLE tpch.nation SECONDARY_LOAD;
Query OK, 0 rows affected (0.50 sec)

mysql>  ALTER TABLE tpch.orders SECONDARY_LOAD;
Query OK, 0 rows affected (10.44 sec)

mysql>  ALTER TABLE tpch.part SECONDARY_LOAD;
Query OK, 0 rows affected (2.19 sec)

mysql>  ALTER TABLE tpch.partsupp SECONDARY_LOAD;
Query OK, 0 rows affected (6.93 sec)

mysql>  ALTER TABLE tpch.region SECONDARY_LOAD;
Query OK, 0 rows affected (0.99 sec)

mysql>  ALTER TABLE tpch.supplier SECONDARY_LOAD;
Query OK, 0 rows affected (0.44 sec)

バックアップからのリストアの場合、HeatWave へのデータロードを明示的に実行しないといけない ようですね。

実行結果

いくつかシェイプサイズや HeatWave Cluster 構成を変えて試してみました。

MySQL DB シェイプ HeatWave Cluster 構成 MySQL(秒) HeatWave(秒) MySQL / HeatWave(倍)
2vCPU・Mem16GB・Disk32GB 16GBx1 13.07 0.75 17.4
4vCPU・Mem32GB・Disk64GB 16GBx2 12.75 0.42 30.4
8vCPU・Mem64GB・Disk128GB 16GBx4 12.66 0.25 50.6
32vCPU・Mem256GB・Disk512GB 256GBx1 12.64 0.08 158.0

MySQL DB のみでの処理時間はシェイプサイズに関わらずほぼ同じですが、これは MySQL では(テーブル全行のSELECT COUNT(*)など一部の例外を除き)パラレルクエリに対応していないからでしょうね。

それに対して、 HeatWave Cluster 構成については、全ノードの合計メモリ容量(と vCPU 数)を増やせば増やすほど高速化 しました。

サンプルデータそのものは 1GB に満たない容量ですが、それでも合計メモリ容量増加の効果が出るのがポイントです。


2023/7/29 追記:

続きを書きました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?