この記事は、Opt Technologies Advent Calendar 2017の13日目です。
はじめに
RDS(PostgreSQL)で、r3.xlarge を利用していましたが、
利用のされ方を見ているモニタリングしていると、m系の方が適していそうと漠然と感じたので、
比較検証をしてみましたので、その結果について書いてみようと思います。
書き込み速度
- Redshiftで集計したデータをdblinkでPostgreSQLで書き込んでいるので、この点について比較を実施します
- 対象とするテーブルは以下のような24テーブルです
- 2回実行した平均です
| # | レコード数 | バイト数(MB) |
|---|---|---|
| 1 | 24,689,290 | 17,445 |
| 2 | 26,807,199 | 18,616 |
| 3 | 26,658,915 | 18,523 |
| 4 | 27,216,467 | 18,872 |
| 5 | 21,746,356 | 16,140 |
| 6 | 22,243,298 | 16,363 |
| 7 | 23,346,676 | 16,938 |
| 8 | 25,408,481 | 17,982 |
| 9 | 23,021,530 | 16,816 |
| 10 | 20,564,258 | 15,685 |
| 11 | 21,436,185 | 16,586 |
| 12 | 20,653,664 | 16,234 |
| 13 | 18,860,732 | 15,382 |
| 14 | 20,036,435 | 16,007 |
| 15 | 18,819,465 | 15,541 |
| 16 | 20,192,921 | 16,392 |
| 17 | 16,203,493 | 14,202 |
| 18 | 16,200,846 | 14,318 |
| 19 | 15,585,507 | 14,049 |
| 20 | 14,966,510 | 13,805 |
| 21 | 13,120,155 | 12,818 |
| 22 | 12,692,634 | 15,954 |
| 23 | 6,199,836 | 13,115 |
| 24 | 9,846,026 | 11,264 |
検証結果
| # | レコード数 | バイト数(MB) | PostgreSQL側のレコード数 | 処理時間(r3.xlarge) | 処理時間(m4.xlarge) | 処理時間が何%に短縮されたか? |
|---|---|---|---|---|---|---|
| 1 | 24,689,290 | 17,445 | 9,191,484 | 0:03:42 | 0:02:40 | 72% |
| 2 | 26,807,199 | 18,616 | 9,705,530 | 0:03:59 | 0:02:59 | 75% |
| 3 | 26,658,915 | 18,523 | 9,714,430 | 0:04:03 | 0:02:59 | 74% |
| 4 | 27,216,467 | 18,872 | 9,879,839 | 0:04:03 | 0:03:03 | 75% |
| 5 | 21,746,356 | 16,140 | 7,769,635 | 0:03:17 | 0:02:25 | 74% |
| 6 | 22,243,298 | 16,363 | 7,782,167 | 0:03:11 | 0:02:24 | 75% |
| 7 | 23,346,676 | 16,938 | 7,928,929 | 0:03:21 | 0:02:26 | 73% |
| 8 | 25,408,481 | 17,982 | 8,494,064 | 0:03:35 | 0:02:28 | 69% |
| 9 | 23,021,530 | 16,816 | 7,515,539 | 0:03:07 | 0:02:23 | 76% |
| 10 | 20,564,258 | 15,685 | 6,426,314 | 0:02:39 | 0:01:58 | 74% |
| 11 | 21,436,185 | 16,586 | 6,466,979 | 0:02:37 | 0:02:00 | 76% |
| 12 | 20,653,664 | 16,234 | 6,183,918 | 0:02:25 | 0:01:52 | 77% |
| 13 | 18,860,732 | 15,382 | 5,370,144 | 0:02:06 | 0:01:41 | 80% |
| 14 | 20,036,435 | 16,007 | 5,751,794 | 0:02:17 | 0:01:45 | 77% |
| 15 | 18,819,465 | 15,541 | 5,233,820 | 0:02:04 | 0:01:36 | 77% |
| 16 | 20,192,921 | 16,392 | 5,596,285 | 0:02:09 | 0:01:44 | 81% |
| 17 | 16,203,493 | 14,202 | 4,367,008 | 0:01:39 | 0:01:21 | 82% |
| 18 | 16,200,846 | 14,318 | 4,365,299 | 0:01:49 | 0:01:19 | 72% |
| 19 | 15,585,507 | 14,049 | 4,098,571 | 0:01:36 | 0:01:16 | 79% |
| 20 | 14,966,510 | 13,805 | 3,822,217 | 0:01:32 | 0:01:08 | 74% |
| 21 | 13,120,155 | 12,818 | 3,443,428 | 0:01:17 | 0:01:02 | 81% |
| 22 | 12,692,634 | 15,954 | 3,321,944 | 0:01:19 | 0:00:58 | 73% |
| 23 | 6,199,836 | 13,115 | 3,103,642 | 0:01:11 | 0:00:55 | 77% |
| 24 | 9,846,026 | 11,264 | 3,043,508 | 0:01:05 | 0:00:49 | 75% |
結論
- 使用可能なメモリ量には余裕がある
- IOPSが頭打ち
以上のような状態であれば、間違いなくr系よりはm系の方が適しているかと思います。
前から使い続けているインスタンスタイプだからといってそのままにせず、利用状況をモニタリングしながら最適なインスタンスを選択する事でよりよい効果が得られるかと思います。
以上です。
読み込み側の検証は今回は記載しておりませんが、またの機会にまとめたいと思います。
それではより良いAWSライフを。