Время от времени я получаю ошибку "слишком много соединений" с моей базой данных mysql, если я делаю
show status like 'Conn%';
Я получаю такой результат
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections | 291 |
+---------------+-------+
1 row in set (0.00 sec)
но если я посмотрю на список процессов с
SHOW FULL PROCESSLIST;
Я вижу только несколько реальных связей
+-----+---------+------------------------------+---------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+---------+------------------------------+---------+---------+------+-------+-----------------------+
| 28 | www | webhost01:38876 | webapp | Sleep | 2 | | NULL |
| 29 | www | webhost01:53322 | webapp | Sleep | 2 | | NULL |
| 30 | www | webhost01:45583 | webapp | Sleep | 2 | | NULL |
| 31 | www | webhost01:35779 | webapp | Sleep | 2 | | NULL |
| 32 | www | webhost01:49122 | webapp | Sleep | 2 | | NULL |
| 36 | root | localhost | NULL | Query | 0 | NULL | SHOW FULL PROCESSLIST |
| 126 | stats | localhost | stats | Sleep | 1056 | | NULL |
+-----+---------+------------------------------+---------+---------+------+-------+-----------------------+
Как я могу увидеть все связи? Я подозреваю, что некоторые приложения не закрывают свои соединения, как я могу отладить / предотвратить это?
В SHOW STATUS
ценность, на которую вы хотите посмотреть, Threads_connected
. Так как Connections
показывает только накопленное количество подключений с момента запуска демона.
Часто бывает важно сравнить ценность Max_used_connections
против SHOW VARIABLES
ценности max_connections
и max_user_connections
.
Количество идентификаторов вашего процесса с SHOW PROCESSLIST
не очень высокий, что предполагает, что одно из этих значений может быть установлено неоправданно низким, если MySQL не был перезапущен с момента последнего возникновения ошибки.
Переменная «Connections» - это счетчик подключений, он равен нулю при запуске сервера mysql. см. руководство