カテゴリー
Linux

【はじめてのスレッドキャッシュ】MySQL チューニングしたいです!★MySQLTuner をきっかけに♪5

ポイント

# 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)

また、直接取り入れはしませんでしたものの、これらのページも大変勉強になりました。ありがとうございます!

いろいろやってみましたが、今のところやっぱり全然 MySQL のチューニングはできていません><、という感触です。次回はもっと向上させたいです。

以上です。

コメントを残す