-
11月022009
MySQLの接続数が多いときのチューニング
4 Commentsデータベースを使ったウェブサイトで、
アクセス数が多いと、当然データベースへの接続数も多くなるかと思います。
MySQLだとデフォルトの最大接続数は100接続までOKのようですが、
接続を維持するキャッシュというのがあるようで、このサイズはデフォルトで0の模様。
また接続維持時間がデフォルトは8時間になっているようです。
ですので、アクセスがたくさんあると、
接続ができなくなるので、このような設定をしました。
とりあえず、MySQLにどれくらいの接続要求があったのか確認します。[root@myhost ~]# mysqladmin -u root -p extended-status | egrep '(Max|Threads_)' Enter password: | Max_used_connections | 101 | | Threads_cached | 0 | | Threads_connected | 59 | | Threads_created | 5225 | | Threads_running | 43 | [root@myhost ~]#
最大接続数はSUPER権限ユーザのために1つ用意されているそうで
Max_used_connectionsは101になっています。
それぞれの値については下記[参考サイト]のThinkITのリンクに書かれています。
とりあえず、こんな感じでチューニングしました。
まず、max_connections は最大接続数。これを100から500に変更。[root@myhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2949 Server version: 5.0.45 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 100 | +-----------------+-------+ 1 row in set (4.97 sec) mysql> set global max_connections = 500; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 500 | +-----------------+-------+ 1 row in set (0.00 sec) mysql> exit Bye
次に、キャッシュの大きさを変更
[root@myhost ~]# mysql -u root -p -e 'SET GLOBAL thread_cache_size = 10' Enter password:
続いて、接続維持時間を8時間から2分(120秒)に変更
(もっと少なくてもいいと思う。ちなみに参考サイトでは15秒にしている)[root@myhost ~]# mysql -u root -p -e 'SET GLOBAL wait_timeout = 120' Enter password:
で、今回設定した値が反映されているか確認してみる。
キャッシュの大きさ[root@myhost ~]# mysql -u root -p -e 'select @@thread_cache_size' Enter password: +---------------------+ | @@thread_cache_size | +---------------------+ | 10 | +---------------------+
接続維持時間
[root@myhost ~]# mysql -u root -p -e 'show variables like "wait_timeout"' Enter password: +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 120 | +---------------+-------+
これだけしておけば、当分大丈夫じゃないかと思ってますが、
さていかに。。
[参考サイト] Thanks!
MySQLの最大接続数を変更する – 治療不可
MySQL接続数多すぎ問題 – のみまくし日記
はじめてのMySQLチューニング 第2回:負荷によるベンチマークを試す – ThinkIT
MySQL の wait_timeout と thread_cache_size の関係
余裕があれば、ThinkITで紹介されている「super-smack」という
MySQLの負荷監視ツールも入れてみたいかな。
コメント 4件
-
KennyQi(ケニーチー) said on 2009年11月5日 at 2:37 AM
この設定をしたら、サーバのCPU稼働率が100%になる時間が出てきた。
うーん、さて次はどうするか。。。 -
KennyQi(ケニーチー) said on 2009年11月26日 at 9:22 AM
CPUの稼働率、
DBとWebサーバを分けたら落ち着きました^^; -
[...] ーバーでは出来ません。) MySQLの接続数が多いときのチューニング Tweet [...]
-
[...] ーバーでは出来ません。) MySQLの接続数が多いときのチューニング Tweet [...]





