ポイント
# max_connections と thread_cache_size を確認 mysqladmin -u root -p variables | grep -E 'max_connections|thread_cache_size'
- thread_cache_size は /etc/my.cnf の [mysqld] ディレクティブの最後に追加する。例 → 「thread_cache_size=151」
現在のスレッドキャッシュの確認方法
こちらのページを拝見しますと、thread_cache_size は max_connections というパラメーターと密接に関わりがあるようです。
ですので両方のパラメーターを見た上で、可能な限り thread_cache_size だけを調節知るようにしたいと思います。
では、2 つのパラメーターを調べます。
[root@oki2a24 ~]# mysqladmin -u root -p variables | grep -E 'max_connections|thread_cache_size' Enter password: | max_connections | 151 | | thread_cache_size | 0 | [root@oki2a24 ~]#
max_connections が 151 の一方、thread_cache_size が 0、つまり無効になっています。
スレッドキャッシュの値を決める方針と実際に設定
先ほどのページでは単純なクエリの場合で試したという前提でしたが max_connections = thread_cache_size と設定されておりました。
そのようなわけで、まず max_connections = thread_cache_size と設定してみます。この状態で Apache Bench で測定してみまして、次に thread_cache_size を増減させましてまた測定して比較していく、という方針を取りたいと思います。
では、実際に設定していきます。
[root@oki2a24 ~]# vim /etc/my.cnf
[mysqld] ディレクティブの最後に「thread_cache_size=151」を追加します。設定ファイルには、「thread_cache=151」と書かなければならないようなのですが、はじめてですのであえて間違えてみようと思います。
MySQL を再起動してみましょうか。きっと停止はできてもパラメーター名が間違っていて起動ができないのだと予想しています。
[root@oki2a24 ~]# /etc/init.d/mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ]
あれれ、起動、できましたね。。。thread_cache_size の設定を確認してみましょう。
[root@oki2a24 ~]# mysqladmin -u root -p variables | grep -E 'max_connections|thread_cache_size' Enter password: | max_connections | 151 | | thread_cache_size | 151 | [root@oki2a24 ~]#
あれれ、thread_cache_size、設定されております。。。MySQL のバージョンが上がって変わったのでしょうか。ともかく、設定の方法がわかりました。
スレッドキャッシュの設定チューニング♪
Apache Bench の次のコマンドで測定することとします。
[root@oki2a24 ~]# ab -n 300 -c 10 https://oki2a24.com/
次のような結果となりました。差が微妙過ぎます。とりあえず、thread_cache_size=151 としておこうと思います。
- thread_cache_size 0 → Requests per second: 0.96 [#/sec] (mean)
- thread_cache_size 151 → Requests per second: 0.97 [#/sec] (mean)
- thread_cache_size 51 → Requests per second: 0.95 [#/sec] (mean)
- thread_cache_size 251 → Requests per second: 0.96 [#/sec] (mean)
そうして MySQLTuner を確認してみますと、、、
あらら、いろいろとチューニングするべきと、警告を出していただけました。まだ終わりは遠そうですね♪
-------- Performance Metrics ------------------------------------------------- [--] Up for: 22s (9 q [0.409 qps], 7 conn, TX: 8K, RX: 703) [--] Reads / Writes: 100% / 0% [--] Total buffers: 88.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 493.8M (48% of installed RAM) [OK] Slow queries: 0% (0/9) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 8.0M/4.8M [!!] Query cache efficiency: 0.0% (0 cached / 4 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 0% (0 on disk / 2 total) [OK] Thread cache hit rate: 85% (1 created / 7 connections) [OK] Table cache hit rate: 78% (26 open / 33 opened) [OK] Open file limit used: 1% (18/1K) [OK] Table locks acquired immediately: 100% (36 immediate / 36 locks) [!!] Connections aborted: 28%
ですが、今回はこれで終わろうと思います。続きはまた今度!
おわりに
本文中でもご紹介させていただきましたが、今回の投稿はこちらの特集を元に試させていただきました。ありがとうございます!
[ThinkIT] 第3回:max_connectionsとthread_cacheのチューニングを行う (1/3)
また、直接取り入れはしませんでしたものの、これらのページも大変勉強になりました。ありがとうございます!
- 大規模サイトの作り方 database 編 | RANDOM.SOFT
- MySQLのメモリ設定を追求してみよう – OpenGroove
- MySQL 5.5.10 ~パフォーマンスチューニング | グーフー WordPressのためのLinuxノート
- MySQLTunerでMySQLのチューニングを診断する方法 | ブログ | 株式会社イー・エージェンシー
いろいろやってみましたが、今のところやっぱり全然 MySQL のチューニングはできていません><、という感触です。次回はもっと向上させたいです。
以上です。