¿Es importante cerrar la conexión mysql?

88

¿Es crucial cerrar las conexiones mysql de manera eficiente, o se cierra automáticamente después de que se haya ejecutado el archivo php?

John Yeary
fuente
Vea esta pregunta también stackoverflow.com/questions/336078/…
alex
Supongo que lo mismo se aplica a ftp_close.
doc_id
¿Es importante cerrar la conexión mysql? sí, es como destructor en c ++
jasinth premkumar

Respuestas:

89

De la documentación :

Nota: El enlace al servidor se cerrará tan pronto como finalice la ejecución del script, a menos que se cierre antes llamando explícitamente a mysql_close ().

Si su secuencia de comandos tiene una buena cantidad de procesamiento para realizar después de obtener el resultado y ha recuperado el conjunto de resultados completo, definitivamente debe cerrar la conexión. Si no lo hace, existe la posibilidad de que el servidor MySQL alcance su límite de conexión cuando el servidor web tenga un uso intensivo. Si no puede cerrar la conexión MySQL hasta cerca del final del script, es más limpio aunque innecesario hacerlo explícitamente.

No estoy seguro de qué tan rápido afecta la cgi a las cosas. Una página afirma que una compilación de PHP que admita fastcgi creará conexiones persistentes, incluso para mysql_connect. Esto contradice la documentación en el sentido de que la conexión se cierra cuando finaliza el proceso, en lugar del script. En lugar de probarlo, recomendaré usar mysql_close (). De hecho, recomiendo usar PDO , si está disponible.

outis
fuente
Supongo que lo mismo se aplica a ftp_close.
doc_id
4
¿Eso significa que si el usuario cierra la página (por ejemplo) antes de tiempo (o hay algún error), la conexión podría permanecer abierta?
Toni Michel Caubet
1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."Cuando el usuario cierra una página antes, no importa para el servidor PHP. Ejecuta el script como siempre y el script final como siempre. Solo el usuario no verá el resultado.
arrowman
9

¿Es crucial? No tanto

¿Se considera una buena práctica a seguir? Si.

No veo por qué no querrías cerrarlo.

ist_lion
fuente
6
Bueno, considerando que incluso la página del manual para mysql_closedice "Usar mysql_close () no suele ser necesario, ya que los enlaces abiertos no persistentes se cierran automáticamente al final de la ejecución del script". Realmente no consideraría una mala práctica no cerrar la conexión.
nico
4
"No veo por qué no querrías cerrarlo". No querrá cerrarlo si hay alguna posibilidad de que lo necesite nuevamente.
Frank Farmer
1
si U usa ajax, entonces si la conexión se cerró, cada vez que intente usar ajax, la conexión se abrirá y se cerrará nuevamente y esto valdrá la pena que dejar la conexión abierta al servidor y al cliente no le importa si la conexión está abierta o no. cuidado que el sitio web sea rápido
Robert
de hecho, ¡puede ser crucial! si la carga del servidor es alta y tiene muchas conexiones no cerradas, como dijo otra persona más arriba, esto puede llevar a un servidor que no responde, ¡así que lo llamaría bastante crucial!
oliiix
Mejor cerrar. Fácil y sin problemas.
José Carlos PHP
4

Cuando use algo como cgi, es completamente innecesario cerrar sus conexiones mysql ya que se cierran automáticamente al final de la ejecución del script. Cuando se utilizan tecnologías persistentes como mod_perl y otras, que mantienen sus conexiones entre solicitudes, es importante realizar un seguimiento de las conexiones, las variables globales, etc.

Básicamente, para datos persistentes, limpie después de usted mismo. Para datos triviales y no persistentes, todos desaparecerán cuando la solicitud finalice de todos modos. De cualquier manera, la mejor práctica es cerrar siempre sus conexiones.

cadena
fuente
1
Está hablando de PHP, que no es persistente, por lo que no se aplica.
Sasha Chedygov
2

Se cierra tan pronto como se completa la ejecución del script. A menos que haya abierto una conexión persistente. Idealmente, debería liberar un recurso (una conexión aquí) tan pronto como haya terminado con él. A menos que exista una buena posibilidad de que lo vuelva a necesitar muy pronto en la ejecución.

La agrupación de conexiones o el uso de conexiones persistentes (si eso es lo que quiere decir) es una buena idea si está detrás de un único servidor de base de datos. Sin embargo, si hay más servidores y está equilibrando la carga, podría afectar la distribución del trabajo. Normalmente, algunos clientes ejecutan consultas pesadas mientras que otros ejecutan consultas más ligeras. Entonces, si se usa la misma conexión en n más, algunos servidores sufrirían una carga pesada mientras que otros estarían infrautilizados. Considere usar ttls más pequeños y un tamaño de grupo de conexiones variable.

neal aise
fuente
1

La mayoría de los CMS cierran la conexión MySQL al final de la solicitud, lo que realmente no tiene sentido, porque PHP lo hará de todos modos.

Sin embargo, si tiene un script en el que la conexión ya no es necesaria, digamos hacia la mitad del script, y luego se llevan a cabo otras actividades pesadas, entonces es una buena idea cerrar explícitamente la conexión. Esto liberará algunos recursos.

Ahora bien, se ha dicho mucho sobre los beneficios de cerrar una conexión, pero casi nada se ha dicho sobre los beneficios de no cerrarla. Esencialmente, si no cierra la conexión al final de un script, entonces realmente está ahorrando algunos recursos. Imagine una aplicación web (o cualquier aplicación) que reciba 100 páginas vistas / segundo. Entonces, cada segundo, deberá invocar mysqli_close100 veces, lo que significa que en cada segundo, tiene 100 viajes de ida y vuelta innecesarios al servidor de la base de datos para cerrar las conexiones abiertas. Desde una perspectiva de rendimiento, esto es pura sobrecarga, ya que PHP verificará las conexiones abiertas cuando el script finalice de todos modos y cerrará esas conexiones, y podría ser que, debido a que todo sucede tan rápido, PHP no ve que tiene cerró esas conexiones e intentará cerrarlas de nuevo.

Nota: la respuesta anterior asume que no está utilizando conexiones persistentes (las conexiones persistentes no se utilizan en ninguno de los principales CMS).

pulpo
fuente