0

問題があります。私のアプリは MySQL との多くの接続を開いてそれにデータを書き込む必要がありますが、しばらくすると、アイドル/スリープ状態の接続がますます多くなり、アプリの速度がそれまで低下します。完全に停止します。'wait_timeout'変数が高すぎると非難しますが、

mysql> show variables like '%timeout%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 28800    |
+----------------------------+----------+
10 rows in set (0.05 sec)

mysql> SHOW FULL PROCESSLIST;
+------+----------+----------------------------------------------------+-------------+---------+------+-------+-----------------------+
| Id   | User     | Host                                               | db          | Command | Time | State | Info                  |
+------+----------+----------------------------------------------------+-------------+---------+------+-------+-----------------------+
| 5425 | root     | ip-10-xxxxxxxx.ec2.internal:60544                 | my_db  | Sleep   | 2344 |       | NULL                  |
| 5426 | root     | ip-10-xxxxxxxx.ec2.internal:60561                 | my_db  | Sleep   | 2136 |       | NULL                  |

そして、このようなつながりがたくさんあります。私の主な質問は、接続をリセットする方法ですか? できることはわかっていますkill PIDが、本当にリセットしたいと思います。

また、wait_timeout で問題が解決すると思いますか。ところで、すべてが Amazon RDS 上にあります。

4

2 に答える 2

3

wait_timeout@datasageが暗示しているように、アプリケーションがそれを適切に処理できない可能性があるため、これはおそらく間違った解決策であると思います。解決策は、アプリケーションが接続を終了したときに接続を適切に閉じることです。

KILL thread_idサーバー側からリセットする正しい方法ですが、これが実際にアプリケーションの速度を低下させていると仮定すると、これは実際のソリューションのパッチにすぎません。

通常、MySQL サーバーには何百ものスリープ状態のスレッドがあります。これは、アプリケーションが再利用のためにそれらをプールに保持するためです。スリープ中のスレッドはスリープ中です。max_connectionsそれらの数が多すぎて RDSの制限に達しない限り、速度が低下することはありません。

于 2013-06-20T01:16:37.763 に答える
1

減らすことはできwait_timeoutますが、クライアントではなくサーバーによって閉じられた接続をアプリケーションが処理できることを確認する必要があります。

于 2013-06-18T20:54:05.590 に答える