tuningathon #5 に参加してきた

いろいろチューニングしてパフォーマンスを競うバトルイベント「チューニンガソン」に参加して来ました。

第5弾! いろいろチューニングしてパフォーマンスを競うバトルイベント「チューニンガソン」1月19日(土) 開催! #tuningathon on Zusaar


今回のお題はmysqlのチューニングでした。

とりあえずデフォルトでの計測

$ python tgbench_mysql.py 127.0.0.1
0.000252962112427
33.3661158085
43.4254088402
78.2620458603
119.059832811
159.897188902
159.897264957

mysqlがyumではいってるmysql5.5だったので、まずはそれの入れ替えを実行

せっかくイベントなので触ったことがないやつということでMariaDBを選択

yumで入れるために repos.d.conf にMariaDBレポジトリを記載

https://kb.askmonty.org/en/installing-mariadb-with-yum/

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos5-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

これでデフォルトの半分ぐらいになった

$ python tgbench_mysql.py 127.0.0.1
0.000237941741943
9.34440684319
18.2691218853
46.2849988937
53.2622439861
61.3170080185
61.3170838356

mysqlのconfの設定を変更

my.conf.d/server.conf

[mysqld]
sort_buffer_size=128MB
read_rnd_buffer_size=128MB
join_buffer_size=128MB
read_buffer_size=512MB
key_buffer_size=512MB

[mysqld-5.5]
innodb_buffer_pool_size = 2048MB
$ python tgbench_mysql.py 127.0.0.1
0.000234127044678
4.9201271534
6.00594115257
11.8122889996
17.1846840382
22.6857671738
22.6858429909

my.confの innodb_buffer_pool_sizeが2G以上にできなくてなやむ

最新のMariaDB10.0-alphaをrpmでインストール

MariaDB-10.0.0-centos6-x86_64-client.rpm
MariaDB-10.0.0-centos6-x86_64-common.rpm
MariaDB-10.0.0-centos6-x86_64-compat.rpm
MariaDB-10.0.0-centos6-x86_64-devel.rpm
MariaDB-10.0.0-centos6-x86_64-server.rpm
MariaDB-10.0.0-centos6-x86_64-shared.rpm
MariaDB-10.0.0-centos6-x86_64-test.rpm
$ python tgbench_mysql.py 127.0.0.1
0.00020694732666
5.1222679615
12.0512940884
16.4838340282
22.7828249931
29.5662739277
29.5663368702

劣化・・・
MariaDB10.0系は捨てることに

MariaDBが32bitがはいってたので、64bit版に変更

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

my.cnfを設定

[mysqld]
sort_buffer_size=256MB
read_rnd_buffer_size=2GB
join_buffer_size=256MB

[mysqld-5.5]
innodb_buffer_pool_size = 8G
innodb_additional_mem_pool_size = 1G
#innodb_locks_unsafe_for_binlog=1

innodb_flush_neighbor_pages = 1
innodb_read_ahead = 1
$ python tgbench_mysql.py 127.0.0.1
0.000209093093872
0.9142370224
1.89475703239
6.26575398445
10.3098518848
14.9117879868
14.9118618965

conf周りは、ある程度いじったので、EXPLAINを実行しつつ、INDEXを調整
複数貼られていたINDEXをpkey以外削除

$ python tgbench_mysql.py 127.0.0.1
0.000207901000977
1.09784293175
2.28688597679
3.59567093849
7.47712683678
11.6268959045
11.626958847

この辺りで、中間発表で暫定10位だった


もろもろINDEXを追加

$ python tgbench_mysql.py 127.0.0.1
0.000213861465454
0.840955018997
1.76738786697
2.78217506409
6.53422188759
10.4379339218
10.4380249977

ここで、タイムアップ

最終結果は、20位だった模様。

感想

5時間あっという間でしたが、楽しくチューニングできた。
最近、ゴリゴリのMySQLのチューニングをしてなくて、
なかなか要領がつかめなくて苦労した。
MariaDBをはじめて使ってみたけど、
ふつうにyumで入れられるし、タイミングみて実践でも使ってみたいなと思った。

なかなか10秒の壁が超えられず、
それを超えた方々がTOP10にランクインしていたので
もう少しのところだったので残念。
ちなみにトップは、6秒台でした。


運営のゼロスタのみなさん、スポンサーのVOYAGEさん、gihyoさん、AWSさん、
ありがとうございました!


twitterのログ