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では編集不可です。
@sh2nd @con_mame クラッシュリカバリーのアレで1にしたんですかね。。 http://t.co/At0nY2QNTE
— yoku (@yoku0825) July 3, 2013
確かに、編集不可というところで、クラッシュリカバリ中で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が対応済みか気になります。
こちらも
@con_mame master_info_repositoryってファイルのままですかね? GTIDが有効になってなくてコレを踏むとどうなるんだろう感があります。。 http://t.co/JjuBIPxUxC
— yoku (@yoku0825) July 3, 2013