Amazon RDS for MySQL で Too many connections
長時間実行してるバッチアプリケーションで、RDSのMySQLが
「Too many connections」て言うようになって困っていました。
MySQLの同時接続数 max_connections の設定値が足りないのかなと
思いきや、information_schema.PROCESSLIST の中身を見たら
mysql> SELECT * FROM information_schema.PROCESSLIST WHERE USER='user' and Command='Sleep' and TIME > 1000\G *************************** 1. row *************************** ID: 66825542 USER: user HOST: ip-01-23-45-67.ap-northeast-1.compute.internal:xxxxx DB: db COMMAND: Sleep TIME: 4306 STATE: INFO: NULL *************************** 2. row *************************** ID: 66825357 HOST: ip-01-23-45-67.ap-northeast-1.compute.internal:xxxxx DB: db COMMAND: Sleep TIME: 4325 STATE: INFO: NULL (省略) 213 rows in set (0.00 sec)
大漁!大漁にある!
バッチの中で接続の切断/破棄が正しくできていないようです。
正しく切断/破棄できるよう、根本の調査が必要なのですが
取り急ぎ、長々と眠っているプロセスをkillします。
mysql> kill 66825542; ERROR 1095 (HY000): You are not owner of thread 66825542
oh,
門前払いをくらいました。
killコマンド、スーパーユーザーしか実行できないようです。
調べたところ、RDSでは mysql.rds_kill および mysql.rds_kill_query
という、killコマンドの代わりになるものが提供されてました。
早速実行してみます。
mysql> CALL mysql.rds_kill(66825542); Query OK, 0 rows affected (0.00 sec)
おお!
無事消えました!
詳しくはこちらをどうぞ
kill mysql thread
https://forums.aws.amazon.com/message.jspa?messageID=337243