Соединения базы данных CodeIgniter не закрываются

Я создал сайт социального сообщества в CodeIgniter, который теперь получает справедливый бит трафика, хостинговая компания начала жаловаться и заявляет, что база данных получает нулевые соединения, а также соединения, которые не закрываются.

Я не совсем уверен, что такое нулевой запрос или как его можно будет выпускать, какие-либо идеи?

Я добавил дополнительный код, чтобы принудительно закрыть соединения, когда код достигнет конца, но, видимо, это не работает.

Может ли кто-нибудь предложить какие-либо предложения относительно того, где искать или начинать отлаживать такую ​​проблему?

благодаря

У меня есть следующее в нижней части моего основного MY_Controller

 public function __destruct() { $this->db->close(); } 

Solutions Collecting From Web of "Соединения базы данных CodeIgniter не закрываются"

Я думаю, что вы получаете проблемы с исходными конфигурациями из базы данных соединений Codeigniter.

На этой странице вы можете увидеть каждое значение из массива config:
http://ellislab.com/codeigniter/user-guide/database/configuration.html

 $db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "database_name"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ""; $db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_general_ci"; $db['default']['swap_pre'] = ""; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE; 

Это база данных конфигурации базового массива, попробуйте установить переменную pconnect в FALSE, когда она включена, система не закрывает какое-либо соединение и в любое время остается открытым для новостных запросов.

Если вы установите значение false, как я уже сказал, ваша система будет продолжать работать отлично, но кодигнитор закрывает и открывает соединение, когда ему нужно использовать базу данных.

Здесь вы можете найти и опубликовать внутри форума codeigniter с парнем, у которого есть проблема с переменными pconnect, может вам помочь! http://codeigniter.com/forums/viewthread/177573/#842016

Codeigniter должен автоматически закрыть соединение с базой данных, но вы можете неявно вызвать его с помощью $this->db->close();

См. http://codeigniter.com/user_guide/database/connecting.html.

вы пытались сделать $this->db->close(); после запроса?

У меня были аналогичные проблемы с CodeIgniter в прошлом, и они были вызваны постоянными соединениями в MySQL, который по умолчанию включен в CodeIgniter. Я использовал запрос SHOW PROCESSLIST в MySQL для просмотра открытых подключений, их текущего текущего запроса, времени (в секундах), для которого было открыто соединение, и т. Д. Если соединение неактивно, в Command поле Command будет указано поле Sleep и Info ( запрос) будет NULL что, вероятно, относится к вашему хосту. Это хорошее место, чтобы начать с такой проблемы.

Еще одна вещь, которую я хочу отметить, – это нюанс PHP, mysql_close который вызывается здесь из метода __destruct вашего контроллера, не приведет к закрытию постоянного соединения MySQL. PHP закрывает непостоянные соединения в конце выполнения скрипта, поэтому обычно не нужно его вызывать.

Я понимаю, что вы говорили, что постоянные соединения не были включены, вот как я начал отлаживать свою проблему, которая очень похожа на вашу проблему.

У меня была такая же проблема, и решение было многочастным (ни одна часть проблемы не всплыла, пока все части не стали проблематичными вместе). PConnect должен быть выключен, если вы не знаете, как его использовать (как говорили другие).

Еще одна вещь, которую следует учитывать, – это то, что ваш веб-сервер является потоковым (например, рабочий режим Apache – наиболее распространенные веб-серверы). Если вы получаете много трафика, и ваши потоки не закрываются быстро, вы можете столкнуться с некоторыми параллельными ограничениями на соединение с сервером или сервером базы данных или исчерпать ресурсы памяти / процессора. Это может привести к зависанию некоторых подключений к базе данных.

Итак, я бы проверить другие признаки проблемы, и не предполагать, что база данных является источником. Это может быть симптом. У вас есть какая-либо информация о нулевых соединениях (например, какой пользователь базы данных их породил)? Это может помочь вам отследить его обратно …

Изменить: Одна вещь, которую я забыл – иногда ошибки PHP могут испортить операции уничтожения CI (которые автоматически закрывают соединения, из моего понимания), поэтому вы также можете проверить свои журналы ошибок.

Я решил такую ​​же проблему на одном сайте CI, изменив драйвер mysql на mysqli в: Database.php:

 $db['default']['dbdriver'] = "mysqli";