過去数年にわたってずっと耳にし続けていて、現在でもよく聞く不満と言えば、Amazon RDSが、MySQLをEC2インスタンスで動かした時と比べて設定の柔軟性がないことだ。と同時に、MySQLインスタンスをチューニングするために非常に重要なパラメータへアクセスできるようにしているという、一貫してAmazonのやってきたことを無視してもいる(所詮、bind_addressをRDSインスタンスで設定することが顧客にとってどの程度関連があるかによる)。
視覚的に見てみよう。
MySQLは、523のオプションを提供している(うち35がNDB関連なのでRDSとは関係ない)。一方で、RDSは(Web UIからは)283のオプションを提供しており、うち58が変更不可能である(basedirやdatadirなど様々な変数)。
では、何がRDSの設定から抜けているのだろう?システム変数は、大雑把には以下のカテゴリに分けることができる。
- 監査ログ
- Memcachedデーモン
- バイナリログの設定
- パフォーマンススキーマ
- リレーログの設定
- 準同期レプリケーション
- SSL
- スレッドプール
- その他
これらについて別々に関連性を見ていこう。
監査ログ
監査ログプラグインは、Amazonで使われているMySQL Community Editionには含まれていない商用機能なので、関係なし。
Memcachedデーモン
RDSはリレーショナルDBアクセスのためにデザインされたもので、キーバリューストア的なアクセスのためのものではない。Memcachedの機能が必要なら、Amazon ElastiCacheをチェックしよう。
バイナリログの設定
バイナリログはRDSではデフォルトで有効になっている。以下の機能は設定できない。
- 古いバージョンのバイナリログ(5.6.6より前)
- バイナリログの保存場所とファイル名
- バイナリログの最大サイズ
バイナリログの最大サイズを設定できれば負荷軽減に一定の効果があるが、私が関わった案件の多くでは、標準的にチューニングするようなものではない。
パフォーマンススキーマ
この設定パラメータがWeb UIから設定できないというのは少々誤解を招くかもしれない。パフォーマンススキーマの有効・無効切替は可能で、それからは通常通りSQLでコレクションを制御する。
リレーログの設定
バイナリログの設定と同じく、チューニングしたいようなことは特にない。一般的な負荷に対しては標準設定がちょうどいい。
準同期レプリケーション
Amazon RDSでは、独自のフェイルオーバ機能があり、アベイラビリティゾーン間でのブロックレベルレプリケーション機能もある。そのため、デフォルトでこの機能がWeb UIから使えないのは驚くことではないが、細かい
SSL
厳しいセキュリティ上の制約のある企業にとっては、SSLの機能がないことはRDSを選択しない理由になる可能性もあるだろう。しかし、セキュリティポリシーによっては、SSLをAmazon VPCで使う方法もある。しかし多くの会社では、これは決断のプロセスでは用をなさないだろう。信じられないことだが、Amazonのリソースでは、これを実現するには超えられない技術的壁がある。これは将来のRDSのリリースで可能になるのではないだろうか。
スレッドプール
スレッドプールプラグインは、MySQLのCommunity Editionでは使えない商用機能であり」、RDSが提供する機能とは関係ない。しかし、Percona ServerとMariaDBの両方が持っているソリューションであり、将来Amazonがそれを選択する可能性もある。
結論
Amazonでは、完全な互換性を持った設定ができる所までは至らないが、全般的に見て、少数の例外(お前のことだよ、innodb_log_file_size)を除いては、重要なパラメータは顧客が設定できるようにしている。
これらのことに関しては、8/28のWebnir 「Running MySQL 5.6 on Amazon RDS」で、それ以外のRDS 5.6に関連した様々なことと合わせて詳細を取り上げるつもりだ。