2014年5月17日土曜日

MySQLのインストールとmy.cnfについて

MySQLの設定について理解を深めるべくメモする。

MYSQLのインストール

yumのリポジトリからインストールする。
$ sudo yum install -y --enablerepo=remi mysql-server

my.cnfを設定する。
4行目に次を追加
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

MySQLを起動する
$ sudo service mysqld start

セキュアの設定
$ /usr/bin/mysql_secure_installation
パスワードを設定する。

デフォルトで起動させる。
$ sudo chkconfig mysqld on

MySQLのオプションファイルをいじる

Ver 3.22以降のMySQLはデフォルトスタートアップオプションをオプション設定ファイル(本環境ではmy.cnf)から読み込む。


 MYSQLの設定 my.cnfをいじってみる

MySQLにログインして、現在設定されている変数情報を見てみる。
> show variables;

ズラッと変数情報が出てきた。
MySQLリファレンス」を参考に、innodb_で始まる変数の中で面白そうなものをいじってみる。

innodb_buffer_pool_size
データをキャッシュするバッファの大きさ。これが大きくなるほどI/Oが減る。
これを小さくして、10万件のInsertしたときの実行速度の差を見る。
・128MB(デフォルト)→ 0.34sec
・32MB → 0.34sec
・5MB(最小)→ 0.35sec
差は見られず。


気分転換にこちらを変えてみる。
innodb_log_file_size
これをいじるとmysqlが起動しなくなった。Innodbのログファイル関係をいじるときは次の手順が必要らしい。

rootで次のコマンドを実行
mysql> SET GLOBAL innodb_fast_shutdown=0;
$ sudo service mysqld stop

$ sudo mv /var/lib/mysql/ib_logfile* /tmp
$ sudo service mysqld start

正常起動しました。

10万件のinsert
・1MB → 0.37sec
・32MB → 0.32sec

100万件のinsert
・1MB → 3.76sec
・32MB → 3.50sec

ちょっとした差は出たが思っていたほどではない。。。

100万件Deleteのほうが大きな差が出た。
・1MB → 3.31sec
・32MB → 2.42sec

Innodbにはいろんなバッファがあり互いに影響し合ってるので、組み合わせによって変わるのだろうが、今のところ全くわからない。

最後に
skip-innodb_doublewrite
これはinnodb_doublewriteをオフにする。
100万件Insert
・ON → 3.33sec
・OFF → 3.36sec
100万件Delete
・ON → 2.89sec
・OFF → 3.76sec
OFFの方が二重書き込みをしないので早くなるかと思ったが、差がでない。


追記

innodb_log_buffer_size
100万件insert
・8MB → 3.5sec
・1MB → 8.7sec
ログファイルへのI/Oが減ることで早くなる模様。しかしなぜinnodb_buffer_pool_sizeでは差が出なかったのかが分からない。バッファ・ログファイル・ディスクへの書き込み順序の影響?

0 件のコメント:

コメントを投稿