Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Disminiur los socket de mysql abiertos

Estas en el tema de Disminiur los socket de mysql abiertos en el foro de Mysql en Foros del Web. Hola Gente, Tengo un script que funciona por horas, el tema es que me empieza a comer memoria cuando llama a una clase en particular, ...
  #1 (permalink)  
Antiguo 08/04/2011, 11:32
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 3 meses
Puntos: 7
Disminiur los socket de mysql abiertos

Hola Gente,

Tengo un script que funciona por horas, el tema es que me empieza a comer memoria cuando llama a una clase en particular, debido a que tiene 100k lineas fui aislando para encontrar el problema, descubrí que crea socket de conexion a mysql cada tanto, el tema es que no se porqué, ya que en sí, la inicializo una vez y ocupo los métodos de esta instancia, les comento que la conexión a mysql la realizo en el constructor de esa instancia en esa clase.

En total el script trabaja con dos conexiones a mysql, una que inicia el script para su propio trabajo y otra que se abre cuando inicializo la clase que les menciono, no se si al tener dos es que genera problema, entiendo que no deberia de ser así.

Estoy trabajando con PDO mysql, alguien a tenido problema similares, saben porque se abren nuevas conexiones? y las anteriores no se mueren?
  #2 (permalink)  
Antiguo 08/04/2011, 11:58
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: Disminiur los socket de mysql abiertos

El problema no es tanto que no se pueda tener dos conexiones instanciadas en el mismo objeto. El problema es que al parecer en alguna parte el proceso de apertura se llama frecuentemente y eso es problema de debuggeo.
Si quieres saber por qué se produce deberás trazar todos los caminos de ejecución de todas las alternativas y ver por dónde se lo está llamando de nuevo sin verificar primero que ya esté abierto, o instanciado.
Es un problema bastante común en sistemás de mediana complejidad. Depurar la basura como esa del código es la parte más molesta del desarrollo.

Armate de paciencia y haz pruebas de escritorio hasta encontrar el punto que genera la/s llamada/s recurrente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/04/2011, 12:14
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 3 meses
Puntos: 7
Respuesta: Disminiur los socket de mysql abiertos

Gracias por la respuesta, me extiendo en el comentario para guiarlos mejor, tengo un script que crea un conexion con mysql, dicha conexion no tiene mayor problema.

Luego cargo una clase y la instancio una sola vez, al hacerlo, esa clase en su constructor crea otra conexión a mysql y se preparan distintas consultas que son usadas por los métodos, ningún método envia una consulta a mysql que no se haya preparado en el constructor.

No se vuelve a realizar otra conexión ni a prepararse más consultas en el script, solamente utilizo los métodos de la clase instanciada.

Los métodos se utilizan dentro de un bucle while y cada bucle tarda alrededor de 1 minuto en completarse.

Lo que me descoloca es que como comentas para crearse nuevas conexiones entiendo que se debería llamar al menos al contructor de nuevo pero esto no se hace en ningun lado.

Creo debe de ser alguna caracteristica de pdo o mysql que estoy omitiendo.

Se les ocurre algo?
  #4 (permalink)  
Antiguo 08/04/2011, 12:37
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: Disminiur los socket de mysql abiertos

No hay otra posibilidad más que la que te digo: Las conexiones no se crean en forma espontánea. Tu constructor las está creando, por lo que lo que hay que ver es cuál es el ciclo de proceso que permite hacer la llamada.
Entiendo perfectamente que si sigues el hilo esperado sólo debería existir una conexión más, pero como te digo, si no se pueden abrir por sí mismas, algo las abre.
A mi me ha pasado en ocasiones que ciertas operaciones que yo preví se hicieran una sola vez, se repetían en forma secuencial sin necesidad y sin poder saber por dónde ocurría. En esos caso lo que debí hacer es seguir línea a línea los procesos y ver toda derivación o subproceso invocado.
Siempre, SIEMPRE me sucedió que encontraba algún hilo donde se invocaba esa llamada desde un subproceso, que a su vez era llamado por otro subproceso, y que podía ser llamado por otro... y así. Debuggear tan fino el PHP es un poco más difícil, pero es necesario, porque allí anda el problema.
Fijate qué objetos están "vivos" en cada momento y verifica que no haya caminos indirectos que puedan llamar al proceso de conexión.

Cualquier duda, consulta en el Foro de PHP, porque este tema es de programación, no de bases de datos.
__________________
¿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: php
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 11:17.