MySQL
AWS
RDS
Aurora

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

More than 3 years have passed since last update.


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現在のもので今後も変わる可能性が大きくあります。