まめ畑

ゆるゆると書いていきます

RDSがMySQL5.6対応したのでベンチマークをとってみた

先日
Amazon Web Services Blog: MySQL 5.6 Support for Amazon RDS
で、RDSがMySQL5.6対応(現在は5.6.12が最新)したということで簡単にベンチマークをかけてみました。

RDSはメジャーバージョンアップが簡単に出来るようになりましたが、5.6へのUpgradeはまだ対応していないので、dump->version up->importする必要があります。

今回RDSがMySQL5.6対応した際に5.6から導入されたMemcached Pluginが使用出来るようになったり、Binlogへのアクセス、innodbの新オプションが使えるようになっています。innodb_buffer_pool_dump_at_shutdownやGTID modeも有効に出来ます。

5.5からあるParameter Groupの中での変更点は

  • innodb_flush_methodがO_DIRECTからfdatasync
  • log_slave_updatesがON

くらいです。
GTID mode OFF
explicit_defaults_for_timestampはONになっています


以前
MySQL5.5 と MySQL5.6 と RDS - まめ畑
Amazon RDSで3TB 30,000IOPSのディスクが使えるようになった - まめ畑
ベンチマークを取りましたので、今回はRDS MySQL5.6.12 2,000IOPS / 15,000IOPSで計測してみました。ベンチマーク条件は以前と同一です。あくまで1ベンチマークの結果としてお考え下さい。

The result logs which where found and the options:
 1 mysql-rds_5.6_2000                              : MySQL 5.6.12 log
 2 mysql-rds_5.6_15000                             : MySQL 5.6.12 log

=====================================================
Operation                           |      1|      2|
                                    |mysql-r|mysql-r|
-----------------------------------------------------
Results per test in seconds:                        |
-----------------------------------------------------
ATIS                                |  23.00|  21.00|
alter-table                         |  34.00|  30.00|
big-tables                          |  13.00|  13.00|
connect                             | 315.00| 310.00|
create                              |4421.00|3650.00|
insert                              |2221.00|2159.00|
select                              | 275.00| 272.00|
wisconsin                           |  45.00|  43.00|
-----------------------------------------------------
The results per operation:                          |
-----------------------------------------------------
alter_table_add (100)               |  17.00|  15.00|
alter_table_drop (91)               |  15.00|  14.00|
connect (10000)                     |  18.00|  18.00|
connect+select_1_row (10000)        |  22.00|  22.00|
connect+select_simple (10000)       |  22.00|  21.00|
count (100)                         |  11.00|  11.00|
count_distinct (1000)               |   4.00|   4.00|
count_distinct_2 (1000)             |   7.00|   7.00|
count_distinct_big (120)            |   9.00|   9.00|
count_distinct_group (1000)         |   8.00|   7.00|
count_distinct_group_on_key (1000)  |   5.00|   6.00|
count_distinct_group_on_key_parts (1|   8.00|   7.00|
count_distinct_key_prefix (1000)    |   3.00|   2.00|
count_group_on_key_parts (1000)     |   6.00|   6.00|
count_on_key (50100)                |  73.00|  73.00|
create+drop (10000)                 | 513.00| 254.00|
create_MANY_tables (10000)          | 158.00| 156.00|
create_index (8)                    |   0.00|   0.00|
create_key+drop (10000)             |3386.00|3152.00|
create_table (31)                   |   1.00|   0.00|
delete_all_many_keys (1)            |  10.00|  11.00|
delete_big (1)                      |   0.00|   0.00|
delete_big_many_keys (128)          |  10.00|  11.00|
delete_key (10000)                  |   9.00|   9.00|
delete_range (12)                   |   3.00|   3.00|
drop_index (8)                      |   1.00|   0.00|
drop_table (28)                     |   1.00|   0.00|
drop_table_when_MANY_tables (10000) | 357.00|  81.00|
insert (350768)                     | 490.00| 458.00|
insert_duplicates (100000)          |  43.00|  42.00|
insert_key (100000)                 | 161.00| 156.00|
insert_many_fields (2000)           |   5.00|   5.00|
insert_select_1_key (1)             |   2.00|   2.00|
insert_select_2_keys (1)            |   3.00|   3.00|
min_max (60)                        |   5.00|   5.00|
min_max_on_key (85000)              |  42.00|  41.00|
multiple_value_insert (100000)      |   1.00|   1.00|
once_prepared_select (100000)       |  47.00|  47.00|
order_by_big (10)                   |   9.00|   8.00|
order_by_big_key (10)               |   8.00|   9.00|
order_by_big_key2 (10)              |   8.00|   8.00|
order_by_big_key_desc (10)          |   9.00|   8.00|
order_by_big_key_diff (10)          |   7.00|   8.00|
order_by_big_key_prefix (10)        |   8.00|   8.00|
order_by_key2_diff (500)            |   1.00|   1.00|
order_by_key_prefix (500)           |   0.00|   1.00|
order_by_range (500)                |   1.00|   1.00|
outer_join (10)                     |  12.00|  11.00|
outer_join_found (10)               |  11.00|  11.00|
outer_join_not_found (500)          |   9.00|   9.00|
outer_join_on_key (10)              |   8.00|   8.00|
prepared_select (100000)            |  52.00|  52.00|
select_1_row (100000)               |  41.00|  41.00|
select_1_row_cache (100000)         |  41.00|  41.00|
select_2_rows (100000)              |  42.00|  40.00|
select_big (80)                     |   7.00|   7.00|
select_big_str (10000)              |  13.00|  12.00|
select_cache (10000)                |  49.00|  50.00|
select_cache2 (10000)               |  49.00|  49.00|
select_column+column (100000)       |  43.00|  42.00|
select_diff_key (500)               |   0.00|   0.00|
select_distinct (800)               |   2.00|   2.00|
select_group (2911)                 |  10.00|  10.00|
select_group_when_MANY_tables (10000|   7.00|   7.00|
select_join (100)                   |   0.00|   0.00|
select_key (200000)                 | 102.00| 101.00|
select_key2 (200000)                | 106.00| 107.00|
select_key2_return_key (200000)     | 102.00| 102.00|
select_key2_return_prim (200000)    | 105.00| 103.00|
select_key_prefix (200000)          | 106.00| 107.00|
select_key_prefix_join (100)        |   2.00|   2.00|
select_key_return_key (200000)      | 100.00| 102.00|
select_many_fields (2000)           |   8.00|   8.00|
select_range (410)                  |  16.00|  16.00|
select_range_key2 (25010)           |  10.00|  10.00|
select_range_prefix (25010)         |  10.00|   9.00|
select_simple (100000)              |  36.00|  37.00|
select_simple_cache (100000)        |  37.00|  36.00|
select_simple_join (500)            |   1.00|   1.00|
update_big (10)                     |  16.00|  16.00|
update_of_key (50000)               |  71.00|  68.00|
update_of_key_big (501)             |   8.00|   7.00|
update_of_primary_key_many_keys (256|  35.00|  36.00|
update_with_key (300000)            | 408.00| 391.00|
update_with_key_prefix (100000)     | 142.00| 135.00|
wisc_benchmark (114)                |   1.00|   1.00|
-----------------------------------------------------
TOTALS                              |7345.00|6498.00|
=====================================================

fdatasyncになり、もう少し性能あがるかなと思ったのですが、性能は芳しくない結果となっています。

CREATE / INSERの性能がかなり落ちているのと、IOPSの成果が芳しくないので現在原因調査と追試をしています。

追記

完全に見落としていましたが、sync_binlogが有効になってました。5.5では編集可能ですが5.6 familyのParameter Groupでは編集不可です。

確かに、編集不可というところで、クラッシュリカバリ中でBinlogが使われるようになったのでそれを保護するためかと思います。
MySQL Bugs: #68932: A regression in 5.6 crash recovery atomicity
全体的に安全側に倒している感じがします。Crash Safe Read Replicasのためとか。

GTIDがデフォルトでOFFなのは運用面が問題になったのでしょうか。

お使いの際はユースケースで検証の後使うことをおすすめします。

その他

Innodb Memcached Pluginが使えるということで
MySQL Bugs: #68530: memory leak with innodb memcached plugin for stale connection
こちらのBugが対応済みか気になります。

こちらも