É crucial fechar a eficiência das conexões mysql ou ele fecha automaticamente após a execução do arquivo php?
É crucial fechar a eficiência das conexões mysql ou ele fecha automaticamente após a execução do arquivo php?
Respostas:
Da documentação :
Nota: O link para o servidor será fechado assim que a execução do script terminar, a menos que seja fechado antes chamando explicitamente mysql_close ().
Se o seu script tiver uma boa quantidade de processamento a ser executado depois de buscar o resultado e tiver recuperado o conjunto de resultados completo, você definitivamente deve fechar a conexão. Caso contrário, há uma chance de o servidor MySQL atingir seu limite de conexão quando o servidor web estiver sob uso intenso. Se você não puder fechar a conexão MySQL até próximo ao final do script, é mais limpo, embora desnecessário fazer isso explicitamente.
Não tenho certeza de como o fastcgi afeta as coisas. Uma página afirma que uma construção de PHP que suporta fastcgi criará conexões persistentes, mesmo para mysql_connect. Isso contradiz a documentação de que a conexão é encerrada quando o processo, em vez do script, termina. Em vez de testá-lo, vou recomendar o uso de mysql_close (). Na verdade, eu recomendo usar o PDO , se estiver disponível.
"The link to the server will be closed as soon as the execution of the script ends."Quando o usuário fecha uma página antes do tempo, não importa para o servidor PHP. Ele executa o script como sempre e termina o script como sempre. Apenas o usuário não verá o resultado.
É crucial? Não muito
É considerada uma boa prática a seguir? Sim.
Não vejo por que você não gostaria de fechá-lo.
mysql_closediz "Usar mysql_close () geralmente não é necessário, pois links abertos não persistentes são automaticamente fechados no final da execução do script." Eu realmente não consideraria uma má prática não fechar a conexão.
Ao usar algo como cgi, é completamente desnecessário fechar suas conexões mysql, pois elas fecham automaticamente no final da execução do script. Ao usar tecnologias persistentes como mod_perl e outras, que mantêm suas conexões entre as solicitações, é importante manter o controle das conexões, variáveis globais, etc.
Basicamente, para dados persistentes, limpe depois de você. Para dados triviais e não persistentes, tudo irá embora quando a solicitação terminar. De qualquer forma, a melhor prática é sempre fechar suas conexões.
É fechado assim que o script conclui a execução. A menos que você tenha aberto uma conexão persistente. Idealmente, você deve liberar um recurso (uma conexão aqui) assim que terminar de usá-lo. A menos que haja uma boa chance de que você precise dele novamente em breve na execução.
O pool de conexões ou o uso de conexões persistentes (se é o que você quis dizer) é uma boa ideia se você estiver atrás de um único servidor de banco de dados. No entanto, se houver mais servidores e você estiver fazendo o balanceamento de carga, isso pode prejudicar a distribuição do trabalho. Normalmente, alguns clientes executam consultas pesadas, enquanto outros executam consultas mais leves. Portanto, se a mesma conexão for usada em mais de n, alguns servidores sofrerão uma carga pesada, enquanto outros estarão subutilizados. Considere o uso de ttls menores e tamanho de pool de conexão variável.
A maioria dos CMSs fecha a conexão MySQL no final da solicitação, o que é realmente insignificante, porque o PHP fará isso de qualquer maneira.
No entanto, se você tiver um script em que a conexão não é mais necessária, digamos no meio do script, e então outras atividades pesadas acontecem, é uma boa ideia fechar explicitamente a conexão. Isso irá liberar alguns recursos.
Agora, muito se falou sobre os benefícios de fechar uma conexão, mas quase nada foi dito sobre os benefícios de não fechá-la. Essencialmente, se você não fechar a conexão no final de um script, você realmente estará economizando alguns recursos. Imagine um aplicativo da web (ou qualquer aplicativo) recebendo 100 visualizações de página / segundo. Portanto, a cada segundo, você precisará invocar mysqli_close100 vezes - o que significa que, a cada segundo, você terá 100 viagens de ida e volta desnecessárias ao servidor de banco de dados para fechar as conexões abertas. Do ponto de vista do desempenho, isso é pura sobrecarga, já que o PHP verificará se há conexões abertas quando o script for concluído de qualquer maneira e fechará essas conexões, e pode ser que, porque tudo acontece tão rapidamente, que o PHP não veja que você tem fechou essas conexões e tentará fechá-las novamente.
Observação: a resposta acima assume que você não está usando conexões persistentes (conexões persistentes não são usadas em nenhum dos principais CMSs).