Aurora S3 Exportの速度はMySQLのほうがPostgreSQLより速そう
「Aurora MySQLは3倍の速度でエクスポート中!」とまではならなかった。
先に結論
AuroraのS3エクスポートでMySQL版とPostgreSQL版で比較したところ、かかる時間はMySQLのほうが短かったです。(ただし、検証したときのデータ量は130MB程度で少ない)
動機
2022/10/20の、エクスポート全般が高速になったというアナウンスを見て、MySQLだけ言及されていたのでPostgreSQLと差がつくのでは、と確かめてみました。
やったこと
データを入れる
DB操作になれていないので.sqlの読み込みなどはせずに、DBクライアントで直接書き込みました。
kaggleのデータベースから、8000行くらいで良さそうなものを見つけて(特に理由なし)、キノコの分類データベースを使いました。キノコの柄やヒダ、カサとかの特徴の分類が入ったデータです。
特に理由なく定義は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 time
とend 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