¿Es importante cerrar la conexión mysql?


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

 74
Author: John Yeary, 2009-05-19

5 answers

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 script tiene una buena cantidad de procesamiento que 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, hay una posibilidad de que el servidor MySQL alcance su límite de conexión cuando la web el servidor está bajo 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 cómo afecta fastcgi a las cosas. One page afirma que una compilación de PHP que soporta fastcgi creará conexiones persistentes, incluso para mysql_connect. Esto contradice la documentación en que la conexión se cierra cuando el proceso, en lugar del script, termina. En lugar de probarlo, voy a recomienda usar mysql_close (). En realidad, recomiendo usar PDO, si está disponible.

 79
Author: outis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-19 04:17:27

¿Es crucial? No tanto

¿Se considera que es una buena práctica a seguir? Sí.

No veo por qué no querrías cerrarlo.

 9
Author: PSU_Kardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-19 03:55:31

Cuando se usa algo como cgi, es completamente innecesario cerrar las conexiones de 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 las conexiones entre las solicitudes, es importante realizar un seguimiento de las conexiones, las variables globales, etc..

Básicamente, para datos persistentes, limpia después de ti mismo. Para datos triviales y no persistentes, todo desaparecerá cuando finalice la solicitud Por cierto. De cualquier manera, la mejor práctica es siempre cerrar sus conexiones.

 4
Author: jess,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-19 04:14:40

Se cierra tan pronto como el script completa la ejecución. A menos que hayas 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 haya una buena posibilidad de que lo necesite de nuevo muy pronto en la ejecución.

La agrupación de conexiones o el uso de conexiones persistentes (si eso es lo que quería decir) es una buena idea si está detrás de un solo servidor de base de datos. Sin embargo, si hay más servidores y se carga equilibrar, podría dañar la distribución del trabajo. Por lo general, algunos clientes ejecutan consultas pesadas mientras que otros ejecutan consultas más ligeras. Así que si la misma conexión se utiliza sobre n sobre, algunos servidores golpearían carga pesada mientras que otros serían infrautilizados. Considere el uso de TTLS más pequeños y el tamaño variable del grupo de conexiones.

 2
Author: neal aise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-19 18:17:15

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

Sin embargo, si tiene un script donde 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, mucho se ha dicho sobre los beneficios de cerrar una conexión, pero casi nada se ha dicho sobre los beneficios de no cerrarlo. 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) recibiendo 100 páginas vistas/segundo. Por lo tanto, cada segundo, tendrá que invocar mysqli_close 100 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 comprobará abra conexiones cuando el script esté terminado de todos modos y cerrará esas conexiones, y podría ser que, debido a que todo sucede tan rápidamente, PHP no vea que ha cerrado esas conexiones e intente cerrarlas nuevamente.

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

 0
Author: itoctopus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 14:45:29