Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 20 Mayo 2016, 03:44 am



Título: Conexiones MySQL Persistentes ?
Publicado por: Diabliyo en 20 Mayo 2016, 03:44 am
Buenas...

Tengo un sitio en el cual estoy recibiendo algo de trafico y anteriormente mi forma de manejar las conexiones a MySQL tenian el procedimiento asi:

1) El script de conecta a la BDD.
2) Realiza la consulta (select, insert, update, etc...).
3) Cerraba la conexión.
4) Retornaba el resultado de la consulta.

Esto ahora veo me esta matando :'(... despues de cierto rato, noto que se alenta el sitio :'(, reinicio httpd y mysqld, y todo se normaliza.

Leyendo en internet encuentro con que se recomienda tener una conexion permanente y cerrar esta conexion cuando el usuario se vaya.

En mi caso, mi sitio es una plataforma que se muestra tras logearse, asi que intente esto (sin exito aun...).

funcion que conecta mysql
Código
  1. function conectar()
  2. {
  3. if( !($link= mysql_connect( "". SERVER. "", "". BASE_USR. "", "". BASE_PASS. "" )) )
  4. $link= "ERROR";
  5. else if( !mysql_select_db( "". BASE. "", $link ) )
  6. $link= "ERROR";
  7. return $link; # retornamos conexion
  8. }

Logeo y Desloqueo
Código
  1.  
  2. # cuando el usuario se LOGEA
  3. if( login($usuario, $pass) )
  4.          {
  5.          $_SESSION["log_id"]= get_datauser( "id", $user, $pass ); # nos da el ID
  6.          $_SESSION["mysql"]= conectar_bdd(); # retorna el ID de conexion
  7.          }
  8. else # no se logeo con exito
  9.          {
  10.          unset($_SESSION);
  11.          reloadpage( "/" ); # recarga pagina
  12.          }
  13.  
  14. # cuando el usuario se DESLOGEA
  15. if( !strcmp($_GET["log"], "out") )
  16.          {
  17.          mysql_close($_SESSION["mysql"]; # cerramos la conexion
  18.          unset($_SESSION);
  19.          session_destroy();
  20.          }

Como se observa la variable $_SESSION["mysql"] la seteo con el ID de la conexión para ese usuario, pero resulta que dicha variable no guarda o nose que sucede, que despues en cierta parte de mi codigo cuando consulto la variable, tiene un valor 0 (cero).

Tal vez la manera en como quiero solucionarlo esta mal, estoy dispuesto en leer sus recomendaciones :D

OJO: ya lei sobre mysql_pconnect(), pero no quiero usarla porque ya esta marcada como obsoleto en php.net

Saludos !


Título: Re: Conexiones MySQL Persistentes ?
Publicado por: engel lex en 20 Mayo 2016, 04:58 am
toda la entensión mysql está marcada como obsoleta, tienes que migrar a mysqli o pdo::mysql, si lees la advetencia de pconnect ahí te dice como hacer...

tu otra opción si tienes espacio de de disco y hosting es guardar la consulta en caché (si es la misma consulta repetidas veces)


Título: Re: Conexiones MySQL Persistentes ?
Publicado por: Diabliyo en 20 Mayo 2016, 06:10 am
toda la entensión mysql está marcada como obsoleta, tienes que migrar a mysqli o pdo::mysql, si lees la advetencia de pconnect ahí te dice como hacer...

tu otra opción si tienes espacio de de disco y hosting es guardar la consulta en caché (si es la misma consulta repetidas veces)

Gracias engel lex por tus comentarios.

Si digamos me chute toda la recodificacion para cambiar de mysql a mysqli, y ya tenga todo listo y funcionando con mysqli mi preguntas son:

1) Cuando haga una consulta y antes haga una conexion, sera necesario llamar a la desconexion ?
2) Si NO llamo a la desconexion, pero al consultar esta por defecto manda llamar una conexion, la existente se retomaria ?
3) Es recomendable configurar las variables de "mysqli_max_persistent" y "mysqli_max_links" ???

OJO actualmente (como uso mysql), cada que termino una consulta, mando llamar: mysql_close(). Pero ahorita que tengo mas usuarios conectados y haciendo consultas, ya siento que el server llega a un punto donde se alenta :'(

Saludos !