Foros del Web » Programando para Internet » PHP »

Verificar y cerrar conexiones con mysql

Estas en el tema de Verificar y cerrar conexiones con mysql en el foro de PHP en Foros del Web. Hola, Feliz año compañeros. Tengo las siguientes consultas: 1 - ¿Existe desde PHP forma de saber cuantas conexiones a mysql hay abiertas en un momento ...
  #1 (permalink)  
Antiguo 07/01/2012, 05:05
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Verificar y cerrar conexiones con mysql

Hola, Feliz año compañeros.

Tengo las siguientes consultas:

1 - ¿Existe desde PHP forma de saber cuantas conexiones a mysql hay abiertas en un momento dado? (mysql_connect)

2 - ¿Se puede cerrar las conexiones abiertas con mysql de otras sesiones?

3 - En mi sitio abro una conexión cada vez que hago una consulta.

¿Esto último está mal y es preferible abrir una conexión persistente y tratar de que todos los que entren usen esa conexión persistente? (mysql_pconnect)


Estas consultas se deben a lo siguiente:

Ayer tuve un problema creo que bastante peculiar. Mi Web lanzaba un error 500, que no era más que una página en blanco. Como todo estaba bien y yo no había tocado código hacía un par de días me comunique con mi proveedor de host. Me comunicaron que todo estaba bien (yo sabía que no), así que tuve que buscarles el problema, y me di cuenta que php no podía conectarse con mySql. Luego de un par de mensajes donde me decían que estaba todo bien y ante mi insistencia. Se pusieron a buscar el problema y lo solucionaron mandándome el siguiente mensaje:

"Te informo que el inconveniente se debia a que has llegado al numero maximo de
conexiones simultaneas a la base de datos, verifica y optimizala cuanto antes. La
he optimizado desde aqui para reestablecer el funcionamiento del sitio, pero fue
un proceso automatico y necesita una revision mas detallada.

Te informo que esta limitado a 15 conexiones por usuario, en todos nuestros
servidores.
"


Desde ya muchas gracias como siempre
  #2 (permalink)  
Antiguo 07/01/2012, 16:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Verificar y cerrar conexiones con mysql

Una vez me dijeron: "Abri la conexion, usala y cerrala en el mismo script..."
  #3 (permalink)  
Antiguo 07/01/2012, 17:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Verificar y cerrar conexiones con mysql

Cita:
Iniciado por LhaN Ver Mensaje
Una vez me dijeron: "Abri la conexion, usala y cerrala en el mismo script..."
Lo que a nivel de aprendizaje puede estar bien. Pero a nivel de desarrollo... es un espanto.

Primero, porque si la secuencia de operaciones de apertura/cierre de conexiones es muy reducida, terminarás saturando el pool de conexiones del mismo Windows, si eso usas.

En segundo lugar, porque lo pagarás con performance: Cada vez que creas una conexión usas una enorme cantidad de recursos de la PC, la red, la Web y de los servidores, todos los cuales se debe liberar al cerrarse la conexión... cosa que no siempre ocurre con la rapidez deseada. Eso hace que el abrir una conexión sea la operación de mayor costo en una consulta, y por ende, mientras más abras y cierres, peor resulta para la performance general del sistema.

En tercer lugar, un uso intenso de conexiones que se abren y cierran constantemente, provenientes todas de los mismos sitios, a nivel de seguridad de sistemas se interpreta de una sola forma: Alguien está atacando el servidor, o está siendo sometido a un uso indebido, probablemente por un software furtivo o ilícito. Ni más ni menos. En ese caso tanto los WebServers como los DBA de los hosting consideran la actividad como ilícita y te bloquean las conexiones, o te cancelan la cuenta.

En cuarto lugar, desde la optica de los DBA, no es buena política dar acceso a la base con una cantidad de conexiones sin límite, porque tu no eres el único usuario del hosting, y ellos tienen también un ancho de banda de dicado a las conexiones, que deben administrar para todos los usuarios... y no sólo para ti.

Por supuesto que existen usuarios que no quieren que les limiten la cantidad de conexiones, sea por las razones que sean (incluyendo el que tengan mucho tráfico comercial), pero para ellos los hosting tienen una solución: Servidores dedicados, por los que pagas algo más de lo que te imaginas.

En resumen, una buena práctica indica:
1) Abre una sola conexión por sesión.
2) Verifica el estado de la conexión antes de hacer las consultas.
3) Cierra las conexiones si y sólo si la sesión ha terminado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 07/01/2012, 19:00
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Verificar y cerrar conexiones con mysql

Bueno, cuando dije usar no quise decir hacer solo una consulta y nada mas, perdon por expresarme de manera tan simplista. Pero basicamente me refiera a todo lo que vos decis. Al final tu resumen es lo que yo quise decir. Probablemente nuestro amigo aqui no este cerrando las conexiones, quisas las cierre en algun script que no es el que las abre, por que en varios scripts que se ejecutan durante toda la session del usuario usa la misma conexion y no este controlando que sucede si el usuario no cierra la session como el espera o incluso puede que no haya controlado las conexiones que abre.
  #5 (permalink)  
Antiguo 09/01/2012, 09:56
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Verificar y cerrar conexiones con mysql

Hola, gracias por las respuestas.

En definitiva lo que yo había leído es que las conexiones se cierran solas al finalizar el script si la conexión no es persistente. Las conexiones que uso no son persistentes.

En todas las consultas tipo update o insert into cierro las conexiones y en todas las consultas select dejo que termine el script y se cierren solas .

Hasta ahora no había tenido problemas, analizando lo que pasó ese día el servidor estaba lento y yo cerré dos o tres veces el navegador en medio de las consultas (la impaciencia me mató) calculo que al no finalizar los script correctamente no se cerraron las conexiones.

Pero esto de las 15 conexiones ahora me deja medio confuso.... uno siempre aspira a tener muchos usuarios en linea. claro que no es el caso en este momento que tengo unas 40 a 60 visitas por día.

En fin en resumen, saco de sus consejos que me convendría mutar el sistema de conexiones comunes por consulta a conexiones persistentes por usuario..... ni más ni menos

Así que les pido un si o un no a mi reflexión así lo agrego a la lista de tareas

Muchas gracias por su tiempo
  #6 (permalink)  
Antiguo 09/01/2012, 10:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Verificar y cerrar conexiones con mysql

Cita:
En definitiva lo que yo había leído es que las conexiones se cierran solas al finalizar el script si la conexión no es persistente. Las conexiones que uso no son persistentes.
Uno de los errores es confundir el cierre de una conexión con la liberación de recursos de la conexión, y también confundir conexión a la base de datos con enlace TCP/IP. Son cosas diferentes.
El que una conexión se cierre no implica la liberación de los recursos de sistema operativo usados en forma instantánea. El S.O. se toma cierto tiempo en liberar los recursos que usó para la conexión. Por eso es que el pool de conexiones de Windows puede llegar a saturarse sin necesidad de demasiada exigencia.
Por otro lado, la conexión a la base puede caerrse simplemente por cambiar de página en el navegador, mientras y la base queda esperando, con la conexión en estado sleep, lo que implica que puede seguir existiendo por un tiempo.
En el otro orden, el enlace TCP/IP no se pierde tan rápidamente, y como en enlace a la página se cuenta en los hosting como algo separado del uso de la base, eso también afectará el servicio que te den.

Resumiendo: La buena práctica sería:
1) Una conexión por sesión de usuario.
2) Verificar el estado de la conexión siempre, antes de enviar una consulta a la base.
3) Cerrar el enlace si y sólo si se ha cerrado la sesión, o la misma ha caído.
4) Si es un usuario genérico, lo conveniente es que al inicio de una sesión, el sistema verifique si hay conexiones a la base dormidas (sleep) y huérfanas, y luego las elimine. (esto lo agrego ahora,porque lo había olvidado )
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/01/2012 a las 11:23
  #7 (permalink)  
Antiguo 09/01/2012, 11:37
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Verificar y cerrar conexiones con mysql

Osea que resulta indispensable el uso de mysql_free_result para liberar los recursos. Que puedo haber sido el motivo por el cual estaba lento el servidor (servidor linux) cuando yo cerré varias veces las pestañas del navegador.


Respecto del punto 4.. no encuentro funciones mysql en php para realizar esta operación.

Como debería buscar información al respecto?
  #8 (permalink)  
Antiguo 20/11/2012, 06:49
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Verificar y cerrar conexiones con mysql

Y cómo puedo solucionar mi problema relacionado con las conexiones persistentes (supongo)

¡Buenas tardes chic@s!
Tengo un pequeño gran problema...y es que al parecer mi web no funciona a veces porque hay demasiadas conexiones a la misma, ¿cómo puedo solucionar esto?

En el soporte técnico del servidor me dicen:

"Cerrar todas las conexiones a la base de datos después de cada consulta y revisar los scripts para que no sobrepasen el número de conexiones con la base de datos"

Pero me quedo igual que si no me dicen nada....¿alguien me ayuda?

Gracias!!
  #9 (permalink)  
Antiguo 20/11/2012, 07:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Verificar y cerrar conexiones con mysql

Sppica: ya tienes un post abierto propio por este tema.
No abras otros posts, reactives post viejos o te cuelgues de ajenos.
Lo primero y lo segundo, puede terminar con una infracción aplicada. Lo ultimo es una falta de cortesía.
No insistas, espera que te respondan, y por favor: lee lo que te postearon.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cerrar, conexiones, mysql, verificar, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:59.