🐷

Aurora S3 Exportの速度はMySQLのほうがPostgreSQLより速そう

2022/11/02に公開

「Aurora MySQLは3倍の速度でエクスポート中!」とまではならなかった。

先に結論

AuroraのS3エクスポートでMySQL版とPostgreSQL版で比較したところ、かかる時間はMySQLのほうが短かったです。(ただし、検証したときのデータ量は130MB程度で少ない)

動機

2022/10/20の、エクスポート全般が高速になったというアナウンスを見て、MySQLだけ言及されていたのでPostgreSQLと差がつくのでは、と確かめてみました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-aurora-mysql-faster-export-s3/?nc1=h_ls

やったこと

データを入れる

DB操作になれていないので.sqlの読み込みなどはせずに、DBクライアントで直接書き込みました。

kaggleのデータベースから、8000行くらいで良さそうなものを見つけて(特に理由なし)、キノコの分類データベースを使いました。キノコの柄やヒダ、カサとかの特徴の分類が入ったデータです。

https://www.kaggle.com/datasets/uciml/mushroom-classification

特に理由なく定義はVARCHAR(2)にして、項目名のハイフンは消しています。テーブル定義はMySQLもPostgreSQLも同じです。

CREATE TABLE mushrooms (
class VARCHAR(2),
capshape VARCHAR(2),
capsurface VARCHAR(2),
capcolor VARCHAR(2),
bruises VARCHAR(2),
odor VARCHAR(2),
gillattachment VARCHAR(2),
gillspacing VARCHAR(2),
gillsize VARCHAR(2),
gillcolor VARCHAR(2),
stalkshape VARCHAR(2),
stalkroot VARCHAR(2),
stalksurfaceabovering VARCHAR(2),
stalksurfacebelowring VARCHAR(2),
stalkcolorabovering VARCHAR(2),
stalkcolorbelowring VARCHAR(2),
veiltype VARCHAR(2),
veilcolor VARCHAR(2),
ringnumber VARCHAR(2),
ringtype VARCHAR(2),
sporeprintcolor VARCHAR(2),
population VARCHAR(2),
habitat VARCHAR(2)
);

挿入は8125行無理やり入れます。こちらはPostgresでのINSERT。

INSERT INTO mushrooms VALUES
('p', 'x', 's', 'n', 't', 'p', 'f', 'c', 'n', 'k', 'e', 'e', 's', 's', 'w', 'w', 'p', 'w', 'o', 'p', 'k', 's', 'u'),
...
('p', 'x', 's', 'n', 't', 'p', 'f', 'c', 'n', 'k', 'e', 'e', 's', 's', 'w', 'w', 'p', 'w', 'o', 'p', 'k', 's', 'u');

MySQLだとテーブル名のあとにcol名を全部書きます。

INSERT INTO 
	mushrooms(class, capshape, capsurface, capcolor, bruises, odor, gillattachment, gillspacing, gillsize, gillcolor, stalkshape, stalkroot, stalksurfaceabovering, stalksurfacebelowring, stalkcolorabovering, stalkcolorbelowring, veiltype, veilcolor, ringnumber, ringtype, sporeprintcolor, population, habitat)
VALUES
('p', 'x', 's', 'n', 't', 'p', 'f', 'c', 'n', 'k', 'e', 'e', 's', 's', 'w', 'w', 'p', 'w', 'o', 'p', 'k', 's', 'u'),
...
('p', 'x', 's', 'n', 't', 'p', 'f', 'c', 'n', 'k', 'e', 'e', 's', 's', 'w', 'w', 'p', 'w', 'o', 'p', 'k', 's', 'u');

このあと、同じデータで10倍にして81,250レコードを作りました。

S3エクスポート

S3にエクスポートします。設定はデフォルトで。

経過時間

  • 待ち時間: 実行後、状態がStartingになってから、開始する(Processing)までが15〜20分かかります。実行時間は記録されないので手動でメモして、エクスポートStartTimeとの差を見ています
  • エクスポート時間: Export task start timeend timeの差

考察

  • データ量が少ないからか、待ち時間の方がエクスポート時間より長くなってしまった
  • 8125と81250では差がわからなかった
  • エクスポート時間はMySQLでは3分、PostgreSQLでは5分となった
- MySQL-1 MySQL-2 Postgre-1 Postgre-2
レコード数 8125 81250 8125 81250
待ち時間 18分 15分 14分 17分
エクスポート時間 3分 3分 5分 5分
合計 21分 18分 19分 22分

失敗していたときの時間

こちらは、データベースの設定が間違っていて空のデータが出てきたときの経過時間です。終わってからこういうメッセージが出ていました。データベース、テーブルがあるけどスキップしてますよという内容ですが、これが先に出ていれば気がついたかも。。

RDS Export aurora-pg-mushrooms has 1 skipped databases, 0 skipped schemas, 0 skipped tables, and 0 general warnings. Please see export metadata file for more details

  • 空のデータなのに、エクスポートが時間がデータがあるときより長くなっている
  • MySQL、PostgreSQL、どちらも同じ
- MySQL PostgreSQL
待ち時間 17分 16分
エクスポート時間 8分 9分
合計 25分 25分

まとめ

  • Aurora MySQL, PostgreSQLでS3エクスポートの時間を測定した
    • MySQLが3分に対して、PostgreSQLでは5分という結果で、MySQLの方がやや速いという結果になった
  • 使用したデータが8万行(130MB)だったので、少なすぎるのかもしれない
  • エクスポート実行開始までの準備時間が16,7分かかって長かった

Discussion