LoginSignup
36
40

More than 5 years have passed since last update.

MySQLのwait_timeoutとthread_cache_sizeについて

Posted at

ごくたまにアプリケーション側でエラーが出てアプリケーション側は終了しているのに、MySQLへのconnectionがそのまま残っていて、芋づる式にconnectionが溢れて行きサービスに繋がらなくなることが起きます。

根本的原因のアプリケーション側を直すべきなのですが、MySQL側でconnectionを長時間保持して欲しくない場合の設定を調べました。

デフォルトでは

wait_timeout = 28,800

となっており、8時間となっています。
これでは長すぎるので、my.cnfに以下を追記します。

my.cnf
wait_timeout = 15

ただ、こうするとアイドル時間の合計が15秒を超えるとconnectionが切られるので、毎回threadを生成したりconnectしたりするオーバーヘッドが大きくなってしまうようなので、以下を設定します。

my.cnf
#thread_cache_size = 8    
thread_cache_size = 100  

thread_cache_sizeのデフォルトは8です。
(thread_cache_sizeの値はどれくらいが良いのかまだ分かっていませんが、max_connectionに合わせるのが良いのでしょうか?)

また、MySQLを再起動せずに反映させるためにmysqlのコンソールで

mysql>SET GLOBAL wait_timeout = 15;
mysql>SET GLOBAL thread_cache_size = 100;

と設定します。

これで、死んでるconnectionもどんどん破棄していってくれて、thread生成のオーバーヘッドも大きくならない、はずです。

間違っていたらご指摘お願い致します。

36
40
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
40