2010年9月1日水曜日

MySQL Error : Too many connections

Too many connectionsの対処


・max_connections
最大同時接続数。
Apacheの最大同時接続数分(MaxClients)は確保できたほうがいいそう。
(max_connections以上のhttpリクエストが来た場合
DB処理ができないプロセスが発生するため)
ただ、接続数が増える分負荷がかかるので注意。

・thread_cache_size
スレッドキャッシュの数。
通常、MySQLのスレッドはクライアント接続ごとに生成・破棄されるのだが、
このパラメータを設定すると、設定した値の数だけスレッドが破棄されず、
他のクライアント接続で再利用することができ、
CPUへの負荷を減らすことができるそう。

・wait_timeout
DBへのコネクションのタイムアウト時間。
DB接続→スレッド生成→待機状態になってから
X秒経過したら接続を切るという数値とのこと。
デフォルト値は8時間だが、
これだとコネクションが溜まっていく一方で上記のエラーの原因になる。
長時間の持続的なDBへのアクセスが行われない限り、
数十秒単位で設定して問題ないと考えられる。


設定方法は以下の通り。
・/etc/my.cnfの修正 以下の記述を追記
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
・・・
max_connections=200 ← 追加
thread_cache=100 ← 追加
wait_timeout=60 ← 追加

設定後のパラメータ変更確認は
show global variables;
で確認できる。

接続数の確認は以下のコマンド

mysqladmin -u root -p extended-status egrep '(MaxThreads_)'

Max_used_connections 54→これまでに記録された同時接続数の最大値
Threads_cached 48 →キャッシュされているスレッド数
Threads_connected 6 →現在開いている接続の数
Threads_created 57→接続を処理するために生成されたスレッド数
Threads_running 1 →スリープ状態になっていないスレッド数
引用元 : のほほんラボ
一部変更



参考サイト:MySQLのチューニング?

0 件のコメント:

コメントを投稿