28.16. Механизм создания устойчивых соединений с базами данных
Устойчивые соединения с базами данных являются одними из самых труднообъяснимых возможностей PHP. Многие разработчики просто не понимают смысла устойчивых соединений, неправильно настраивают их, постоянно испытывают затруднения при решении проблем с устойчивыми соединениями и, как следствие, игнорируют этот тип соединений как таковой. Но вследствие того, что в большинстве ситуаций использование устойчивых соединений дает существенный выигрыш в производительности, очень важно понимать, каким образом их можно правильно установить.
Что в первую очередь необходимо знать об устойчивых соединениях, так это то, чем они не являются. Устойчивые соединения совсем не то, что возможность организации связного пула, которая имеется в драйверах ODBC, JDBC и драйверах определенных баз данных. Организация связного пула или процесс передачи пула соединений потокам серверов не совсем подходит для PHP, так как типичная среда PHP не является многопотоковой. В Web-сервере Apache 1.x (а также в версии 2.0, когда используется предварительное MPM-ветвление) параллельность достигается при наличии нескольких процессов. Поскольку подключения к базам данных нельзя разделить между различными процессами, не представляется никакой возможности для использования связных пулов, т.е. соединение, открытое одним процессом, нельзя использовать другим процессом.
В противовес соединениям, осуществляемым с помощью связного пула, устойчивые соединения не закрываются после завершения обработки запросов, как это имеет место с обычными соединениями. Будущие запросы, которые обрабатываются аналогичным процессом, могут впоследствии использовать открытое соединение, что позволяет избежать накладных расходов, связанных с установкой соединения при обработке каждого запроса в отдельности. Фундаментальное различие между соединениями с помощью пула и устойчивыми соединениями можно объяснить следующим образом: устойчивые соединения держат одно открытое соединение для каждого экземпляра Web-сервера, в то время как при соединениях, осуществляемых с помощью пула, относительно небольшое количество открытых соединений разделяется между всеми экземплярами сервера. 
Теперь, вооружившись этими знаниями, вы сможете принимать более взвешенные решения о целесообразности использования устойчивых соединений, а если такое решение уже принято, то вы знаете, каким образом их устанавливать. По этому вопросу существует несколько решений.
При использовании устойчивых соединений на протяжении достаточно длительного времени каждый работающий процесс Web-сервера Apache должен иметь одно открытое соединение. Это значит, что сервер вашей базы данных должен иметь возможность обра­батывать по меньшей мере столько же активных соединений, сколько задано директивой MaxClients сервера Apache. А еще лучше иметь на несколько дополнительных свободных соединений больше, чем установлено в MaxClients, что оставит возможность подключаться к серверу базы данных для решения административных задач.
Использование устойчивых соединений имеет смысл только тогда, когда сервер базы данных эффективно обрабатывает большое количество открытых соединений. Определенные серверы баз данных существенно снижают свои характеристики при работе с большим количеством открытых соединений, даже если они в большинстве своем находятся в режиме ожидания. Другие серверы могут иметь лицензионные ограничения на число одновременных соединений, которые можно сделать к ним в определенный момент времени. Для таких серверов устойчивые соединения не рекомендуются. Примером такого сервера, который достаточно эффективно обрабатывает большое количество одновременных соединений, является сервер СУБД MySQL, поэтому при работе с этой СУБД можно смело рекомендовать использование устойчивых соединений.