0

Я использую библиотеку phpgacl в одном из моих приложений для авторизации. Эта библиотека создает соединения с базой данных с помощью mysql_pconnect. Проблема в том, что соединения не используются повторно, а время от времени все приложение падает с ошибкой слишком много соединений. У меня не так много одновременных пользователей, и, следовательно, увеличение максимального количества соединений в mysql не решит проблему навсегда. Я сделал простой тест, чтобы упростить проблему. Я написал простой скрипт /var/www/a.php:Стойкие соединения с БД не используются повторно

<? 
mysql_pconnect('localhost', 'root', 'root'); 
?> 

Когда я ударил localhost/a.php в первый раз, я вижу одно подключения к базе данных в тузде PROCESSLIST. Когда я ударяю ссылку во второй раз, я ожидаю, что соединение будет повторно использовано. Но это не так. Создается новое соединение, и я вижу два соединения в состоянии сна. Счет увеличивается каждый раз, когда я нажимаю ссылку.

Все эти соединения закрываются, когда я перезапускаю apache.

Я хочу знать, как работает php mysql_pconnect и как он использует ранее выполненное соединение mysql. И почему это не происходит в приведенном выше примере?

Один из комментариев here гласит:

You are probably using a multi-process web server such as Apache. Since database connections cannot be shared among different processes a new one is created if the request happen to come to a different web server child process.

ли не рекомендуется это означает, используя mysql_pconnect с апача?

ответ

0

Каждое соединение DB умирает с завершением процесса php. Поэтому ожидается, что постоянные соединения не будут использоваться совместно с другими веб-потоками. mysql_pconnect может разделить DB соединение только на время выполнения прикладной программы среди различных классов, т.е. Решения вашей проблемы являются:

  1. сократить время ожидания для соединений БД в MySQL конфигурации
  2. закрыть DB соединения в вашем приложении
  3. макияж собственный демон для запросов БД (но это очень сложно)
Смежные вопросы