読者です 読者をやめる 読者になる 読者になる

EC2(micro)上でのmysqlパフォーマンス設定と測定

最低限の設定のみで動かしていた、EC2にインストールしたmysqlですが、エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド(http://www.amazon.co.jp/dp/4774142948)を買ったので、チューニングしてみました。性能改善よりもmicroインスタンスでメモリが少ないため、メモリ消費量を抑える観点で設定を実施しています。学習用の個人サイトでアクセスがほぼなく、レスポンスが遅い訳ではないため。

[mysqld]
max_connections = 1024
table_open_cache = 2048
table_definition_cache = 1100
key_buffer_size = 16M
read_buffer_size = 128K
read_rnd_buffer_size = 256K
join_buffer_size = 128K
slow_query_log
long_query_time = 3
log_queries_not_using_indexes
open_files_limit = 5500
innodb_buffer_pool_size = 100M
innodb_additional_mem_pool_size = 1MB
innodb_autoextend_increment = 64M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 1M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_commit_concurrency = 5

書籍から変更しているパラメータと理由は下記のとおり。
・table_open_cache
 →テーブルが2つのため
・read_buffer_size、read_rnd_buffer_size、join_buffer_size
 →デフォルト値(未設定状態)でも性能が出ていたため
innodb_buffer_pool_size
 →扱うデータ量が少ないため(1ヶ月稼働で現在8MB程度。1年間もてばよい。)
innodb_additional_mem_pool_size
 →テーブルが2つで少なく、またデフォルト値(未設定状態)でも性能が出ていたため
innodb_thread_concurrency 、innodb_commit_concurrency
 →更新量も参照量も少ないため、書籍より数値を減らして様子見

設定前後の性能は、Chromeの開発者機能でサイト(http://ysfj.net/umakatter)のhtml(mysqlでの参照結果を含む)が戻ってくる時間を20回計って確かめました。キャッシュは無効化して、毎回別のページに遷移しています。
設定前→0.225秒
設定後→0.201秒

性能が落ちてなかったので、しばらくこれで様子見します。
mysqlslapも試したかったですが、実際のWebアクセスにおけるクエリで測定したほうが妥当と考え、この計測方法としました。