Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Compreendendo totalmente o PDO ATTR_PERSISTENT

Ponto de vista do Apache


O Apache tem um processo pai. Este processo cria processos filho que irão lidar com quaisquer solicitações que chegam ao servidor web. A quantidade inicial de processos filho iniciados quando o servidor web é iniciado é configurada pelo StartServers diretiva na configuração do apache. O número aumenta conforme necessário com uma quantidade crescente de solicitações atingindo o servidor web até ServerLimit é atingido.

PHP e conexões persistentes


Se o PHP (executado como mod_php, como CGI todos os recursos são liberados no final da execução do script) agora está sendo instruído a estabelecer uma conexão persistente com um banco de dados para uma solicitação, esta conexão é mantida mesmo após o script terminar. hold é uma conexão entre o processo filho do apache pelo qual a solicitação foi tratada e o servidor de banco de dados e pode ser reutilizada por qualquer solicitação que esteja sendo tratada por esse processo filho exato.

Se, por algum motivo (não me pergunte exatamente por quê), o processo filho estiver sendo ocupado por mais tempo do que a solicitação real e outra solicitação chegar, o processo apache pai redirecionará essa solicitação para um (novo) processo filho que pode não ter estabelecido uma conexão com o banco de dados até este momento. Se for necessário durante a execução do script, ele aciona o SID conforme você observou. Agora, existem duas conexões mantidas por dois processos filhos diferentes do apache.

Lembre-se de que...


É importante saber, que isso também pode causar muitos problemas. Se houver um loop infinito ou uma transação abortada ou algum outro erro imprevisível durante a execução do script, a conexão é bloqueada e não pode ser reutilizada .Também pode acontecer que todas as conexões disponíveis do banco de dados sejam usadas, mas há outro processo filho do servidor apache tentando acessar o banco de dados. Este processo está bloqueado por enquanto até que uma conexão seja liberada pelo banco de dados ou apache (tempo limite ou voluntariamente por rescisão). Qualquer informação adicional sobre este tópico nesta página:http://www.php.net/manual/en/features.persistent-connections.php

Espero ter resumido corretamente tudo o que discutimos em nossa conversa de comentários e não me esqueci de nada. Se sim, por favor, deixe-me uma dica e eu a adicionarei. :)

Editar:

Acabei de ler o artigo @MonkeyZeus mencionado neste comentário. Ele descreve o processo que resumi acima e fornece informações úteis sobre como otimizar seu servidor apache para funcionar melhor em conjunto com conexões persistentes. embora. Você deve dar uma olhada:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html