Mam obecnie uruchomioną aplikację z MySQL w webfaction. Baza danych jest prywatna i co około 12 godzin pojawia się sporadycznie błąd "Zbyt wiele połączeń".Ciągle otrzymuję "Zbyt wiele połączeń" w Django 1.4.20
Więc zalogowany jako root w MySQL, aby sprawdzić liczbę aktywnych połączeń
mysql> show status like '%onn%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| Aborted_connects | 4 |
| Com_enable_governor_reconn | 0 |
| Com_enable_governor_reconn_lve | 0 |
| Connections | 12 |
| Max_used_connections | 1 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------------+-------+
Note że Max_used_connections = 1 (??? !!!) Weird. Ok, więc może tam jest problem z procesów ...
mysql> show processlist;
+----+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+-------+------------------+
| 12 | root | localhost:38884 | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
lub maks połączenia jest ustawiony na niewytłumaczalnie niskiej liczbie ...
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)
więc zrezygnować. Wygląda to jak A) Wpadłem na jeden z tych naprawdę niejasnych błędów lub B) Potrzebuję wakacji.
Ktoś ma pomysł?
Dzięki.
EDIT: znalazłem problem
Problem był spowodowany for object in Model.object.iterator()
pętli w tle uruchomiony z zadania cron. Jak się okazało, pojawił się problem z prawidłowym zamknięciem plonów i połączeń. Zmieniono to na .all()
i działało to poprawnie.
Wyciągnięte wnioski: 1) unikaj używania .iterator()
z zadaniami tła; 2) unikaj używania bazy danych aplikacji dla zadań wykonywanych w tle, jeśli to możliwe.
odpowiedź jest zawsze ** (B) ** – rnevius
plus jeden dokonywania czuję się gorzej. – misterte
Czy robisz cokolwiek z 'Thread's? – rnevius