Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Persistência de conexão PHP MySQL


A persistência é feita pela cópia do PHP que está embutido no servidor web. Normalmente você estaria certo - se o PHP estivesse rodando no modo CGI, seria impossível ter uma conexão persistente, porque não haveria nada para persistir quando a requisição é feita e o PHP é desligado.

No entanto, como há uma cópia do PHP embutida no servidor da Web, e o próprio servidor da Web continua executando entre as solicitações, é possível manter um conjunto de conexões persistentes dentro desse PHP "permanente".

No entanto, observe que nos modelos de servidor do tipo multi-worker Apache, os pools de conexão são mantidos PER-CHILD. Se você definir o limite do pool para 10, terá 10 conexões por filho do Apache. 20 filhos =200 conexões.

Conexões persistentes também levarão a problemas de longo prazo com deadlocks e outros problemas difíceis de depurar. Lembre-se - não há garantia de que as solicitações HTTP de um usuário serão atendidas pela MESMA conexão apache/mysql. Se um script morrer no meio de uma transação de banco de dados, essa transação NÃO ser revertida, porque o MySQL não vê o lado HTTP das coisas - tudo o que vê é que a conexão mysql<->apache ainda está aberta e assume que está tudo bem.

O próximo usuário a acessar aquela combinação de conexão/filho/apache/mysql em particular agora terminará magicamente no meio dessa transação, sem nenhuma pista de que a transação está aberta. Basicamente, é o equivalente da Web a um banheiro sem descarga - todo o "lixo" do usuário anterior ainda está lá.

Com conexões não persistentes, você tem a garantia de ter um ambiente 'limpo' toda vez que se conectar.