RDS for AuroraとRDS for MySQL5.6のParameter Groupsの違いをみてみた

  • 35
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

RDS for Aurora

Auroraは2014年のre:Invent2014で発表された、AWSがクラウドネイティブ時代に、再考したMySQL5.6と互換性を持った作った新しいデータベースです。Auroraの特徴は既に情報も出来てきていて、どんな特徴を持ったデータベースかご存知の方も多かと思いますが、Auroraの概要は以下のスライドと発表Blogをご覧ください。
スライド / 英語Blog / 日本語Blog

Parameter Groups

Parameter Groupsを一言で言うと、MySQLでいうmy.cnfです。RDSでは直接ホストサーバにログインすることが出来ないので、Parameter Groupsを使ってMySQLに与えるパラメータを変更します。全てのパラメータが変更可能というわけではなく、一部変更不可能なものも存在します。

Auroraのlimited previewで既にAurora環境をテスト出来る方も増えてきているのではないかと思いますが、ベンチマークで重要になってくる、このParameter Groupsのデフォルト値をRDS for MySQL5.6と比較してみました。SQLレベルでの互換性はありますが、パラメータなどはAurora独自の設定があったり、もちろん実際のユースケースに応じて変更していただくと性能が引き出せると思います。
MySQLとAuroraをデフォルトパラメータ同士でパフォーマンス測定をして性能比較してみるという場合はdefault値で違いがあることを是非確認してみてください。

まずはお約束

今回比較してみたParameter Groupsは2015/6/24現在のもので今後も変わる可能性が大きくあります。
そのためベンチマークなどを行う前にその時のdefault Parameter Groupの値を是非確認してみてください。

比較してみた

default.mysql5.6とdefault.aurora5.6で違う部分のみをざっくり取り出してみました。
DBInstanceClassMemoryは各DBインスタンス内で使えるメモリ容量の変数です。

default値

パラメータ名 MySQL5.6 Aurora 変更可否
default_tmp_storage_engine InnoDB myisam N
innodb_buffer_pool_size {DBInstanceClassMemory*3/4} {DBInstanceClassMemory*6/10} Y
innodb_checksum_algorithm innodb none N
innodb_file_per_table ON OFF Y
innodb_undo_tablespaces engine-default (0) 0 N
max_connections {DBInstanceClassMemory/12582880} {log(DBInstanceClassMemory/8187281408)*1000} Y
query_cache_size engine-default {DBInstanceClassMemory/24} Y
query_cache_type 0 1 Y
skip-slave-start 1 0 AuroraだけY
skip_name_resolve 0 1 Y
sql_mode NO_ENGINE_SUBSTITUTION 0 Y
table_open_cache 2000 32000 Y
table_open_cache_instances 16 1 AuroraだけN
thread_cache_size 8 {DBInstanceClassMemory/1005785088} Y

設定可能な値

パラメータ名 MySQL5.6 Aurora
innodb_buffer_pool_size 5242880-18446744073709551615 1048576-9223372036854775807
innodb_checksum_algorithm crc32, innodb, none, strict_crc32, strict_innodb, strict_none crc32, innodb, none, strict_crc32, strict_innodb, strict_none
innodb_undo_tablespaces 0-126 0-18446744073709551616
max_connections 1-100000 1-16000
query_cache_size 0-9223372036854774784 0-9223372036854774784
query_cache_type 0-2 0-2
sql_mode ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_BY_ZERO, HIGH_NOT_PRECEDENCE,IGNORE_SPACE, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO, NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE, NO_ENGINE_SUBSTITUTION, NO_FIELD_OPTIONS, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_UNSIGNED_SUBTRACTION, NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY,PAD_CHAR_TO_FULL_LENGTH, PIPES_AS_CONCAT, REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES, ANSI,DB2,MAXDB,MSSQL,MYSQL323,MYSQL40, ORACLE, POSTGRESQL, TRADITIONAL 0,ANSI, ALLOW_INVALID_DATES, ANSI_QUOTES,ERROR_FOR_DIVISION_BY_ZERO, HIGH_NOT_PRECEDENCE,IGNORE_SPACE, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE, NO_ENGINE_SUBSTITUTION, NO_FIELD_OPTIONS, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_UNSIGNED_SUBTRACTION, NO_ZERO_DATE, NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY,PAD_CHAR_TO_FULL_LENGTH, PIPES_AS_CONCAT, REAL_AS_FLOAT,STRICT_ALL_TABLES, STRICT_TRANS_TABLES, TRADITIONAL
table_open_cache 1-524288 1-524288
thread_cache_size 0-16384 0-16384

今のところの所感

innodb_buffer_pool_size / query_cache / table_open_cache などの性能面に関わるパラメータがインスタンス内で利用可能なメモリ容量に応じて自動的に変化し、インスタンスタイプによってはRDS for MySQL5.6と比較して、かなり小さい値になることもあります。query_cacheに関してはquery cacheのルックアップやインバリデートなどのためquery cacheがあまり効かないケースではオーバヘッドが大きくなってしまうので注意が必要です。
その他にもmax connectionの設定可能範囲やdefault値も少なくなっています。そのため、ベンチマークを取る際に性能に差がでる場合などはこの変のパラメータを揃えてみるなどして変化を観測すると特性が見えてくるかと思います。細かいところだと、sql modeの差異もあります。

お約束

こちらは個人の意見で会社とは関係ありません。お約束です。
再掲しますが、今回比較してみたParameter Groupsは2015/3/23現在のもので今後も変わる可能性が大きくあります。