MySQLのコネクション関連

接続数関連

現在の接続数
show status like 'Threads_connected';
最大接続数
show global variables like 'max_connections';

接続時間

非対話式

アプリケーションやスクリプトなど
デフォルトは28800(8時間)

show global variables like 'wait_timeout';
対話式

MySQL Workbenchやコマンドラインツールなど
デフォルトは28800(8時間)

show global variables like 'interactive_timeout';

コネクション関連

30分以上接続しているコネクションを抽出

但し、環境によっては必要な場合あるため、必ずuserは確認すること!(ex. rdsadmin)

SELECT * FROM information_schema.PROCESSLIST WHERE time >= 1800 ORDER BY time;
不要なコネクションを止める

上のコマンドの実行結果で得たID列の値を入れて殺る

kill ID;
processlistとinformation_schema.PROCESSLISTの違い
項目 processlist information_schema.PROCESSLIST
確認方法 show processlist select * from information_schema.PROCESSLIST
詠唱文表示数 100文字まで 全て
スレッドの状態 Stateカラムで簡易管理 Stageカラムで詳細管理
優先度 非表示 表示有
用途 ぱぱっと 詳細確認

その他

接続が常にmax_connectionのまま

SLEEPが動いてないのでは?
→基本はそんなことない(特殊設定していたらしらないけど)。
 例えば、コネクションプールみたいなの利用していたら、切れたらまた接続しにやってくる。
 そのため、コネクション切断しても再度接続して常に満員御礼状態になる。
→max_connectionsの設定値を増やすか、接続元の接続数を減らす必要がある。

接続数エラーはクライアント側でも分かるの?

分からない場合がある。
MySQL5.7に対して、A5:SQL Mk-2で接続するとエラーと表示されたが、MySQL Workbench 8.0ではエラーとしか表示されなかった。
そのため、利用するクライアントの種類や、"バージョン"によってはエラーが表示されないかもしれない。
(上記ケースは、MySQL Workbench8.0では接続してもエラーになる古いMySQL5.7だったというオチな気がしている)

show statusとshow global variablesの違い
  • show status:現在値を閲覧するコマンド
  • show global variables:設定値を閲覧するコマンド