メンチカツ

ロースカツが好きです

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