KennyQi PHP Blog

Linux、PHP、Perl、Ajax、MySQLでのWeb開発やWordPressの設定メモと息抜きブログ

  • 11月022009

    MySQLの接続数が多いときのチューニング

    Published on 2009/11/02 07:11 15,313
    カテゴリ: Linux, MySQL, PHP; タグ:

    データベースを使ったウェブサイトで、
    アクセス数が多いと、当然データベースへの接続数も多くなるかと思います。
    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の負荷監視ツールも入れてみたいかな。

    このページはどうでしたか?
    よくないよい (No Ratings Yet)
    4 Comments
  • 初めて当ブログに訪れた方や何度か当ブログにお越し頂いている皆様。
    もしブログの内容を気に入って頂けましたらRSSリーダーの登録よろしくお願いします。

コメント 4件

  1. KennyQi(ケニーチー) said on

    この設定をしたら、サーバのCPU稼働率が100%になる時間が出てきた。
    うーん、さて次はどうするか。。。

  2. KennyQi(ケニーチー) said on

    CPUの稼働率、
    DBとWebサーバを分けたら落ち着きました^^;

  3. [...] ーバーでは出来ません。) MySQLの接続数が多いときのチューニング Tweet [...]

  4. [...] ーバーでは出来ません。) MySQLの接続数が多いときのチューニング Tweet [...]

コメント


ブログランキング

にほんブログ村 IT技術ブログへ 人気ブログランキングへ

最新記事

カテゴリー

人気記事