Что еще следует иметь в виду при использовании mysql_pconnect в вызовах AJAX - PullRequest
0 голосов
/ 23 декабря 2011

Я создаю приложение (MySQL / PHP), которое (со временем) может использовать соединения с удаленными (и, возможно, медленными) серверами MySQL. Приложение использует шепот AJAX, который часто открывает соединения с БД. Я провел некоторую оптимизацию на стороне клиента, но никогда не имел достаточно смелости, чтобы использовать постоянные соединения, что может быть хорошей идеей здесь.

Я беспокоюсь о неработающих подключениях mysql, которые могут превышать лимит сервера, что приводит к необходимости перезапуска сервера. Таким образом, я планирую использовать mysql.connection_timeout до 15 с, что убьет каждое простаивающее постоянное соединение после лимита? Или это будет блокировать системные ресурсы до конца времен серверного процесса?

Я не буду использовать транзакции шепотом, и каждая блокировка должна быть снята после закрытия соединения, верно?

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

1 Ответ

2 голосов
/ 23 декабря 2011

Обычно вы ничего не получаете, используя постоянные соединения с MySQL. Протокол его соединения, как правило, довольно быстрый. То, что вы теряете, является гарантией «чистой» операционной среды при использовании регулярных непостоянных соединений.

Если какой-либо из ваших сценариев по какой-либо причине умирает, находясь в середине транзакции, или оставляя установленные переменные на стороне сервера, постоянное соединение означает, что незавершенная транзакция все еще активна, когда соединение снова обнаруживается каким-либо ДРУГИМ сценарием ,

Вы можете легко попасть в тупиковую ситуацию, когда это произойдет. Новый сценарий не знает, что у него старое / грязное соединение, и MySQL не может видеть, что исходный соединительный сценарий исчез и выполняет свою собственную очистку, поэтому вы в конечном итоге получите окруженную мусором среду.

При этом вы можете ограничить количество подключений, которые PHP будет поддерживать от вашего имени, с помощью параметра mysql.max_persistent. Независимо от того, сколько соединений вы пытаетесь установить из своих сценариев, PHP никогда не превысит этот предел, поэтому вы можете установить его ниже, чем собственный параметр MySQL max_connections.

...