Foros del Web » Programando para Internet » PHP »

Liberando recursos

Estas en el tema de Liberando recursos en el foro de PHP en Foros del Web. Hola chicos; Esta vez les mando una pregunta un tanto existencial. Trabajando con Bases de datos, ¿me podrían decir para que sirve el mysql_free_result?. Sé ...
  #1 (permalink)  
Antiguo 21/11/2003, 03:32
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 6 meses
Puntos: 0
Liberando recursos

Hola chicos;

Esta vez les mando una pregunta un tanto existencial. Trabajando con Bases de datos, ¿me podrían decir para que sirve el mysql_free_result?. Sé que lo que hace es liberar recursos, pero es que no entiendo bien ese concepto, ¿es que se quedan guardadas en un temporal las consultas realizadas?

Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 21/11/2003, 03:45
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Mira www.php.net/mysql_unbuffered_query . Ahi comenta como con mysql_query() todos los registros devueltos por MySQL en un buffer, que es el que libera mysql_free_result(). Por ejemplo, si tu consulta devuelve 10000 registros, cada uno con una media de 100 bytes por registro (muy poco), pues tienes un buffer de 1Mb, que ya es espacio.

Asi que si haces una consulta que devuelve muchos datos, si es recomendable usar mysql_free_result(). Para consultas pequeñas, no es necesario, ya que se libera automatica al finalizar el script.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 21/11/2003, 03:49
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 6 meses
Puntos: 0
Ok, pero lo que no entiendo es el proceso, osea, se realiza la consulta, y el mysql_query va leyendo registro a registro. Y una vez que ha llegado a la última fila se detiene y ya está, sean 10 registros o 10000. ¿Qué diferencia aporta el mysql_free result()?

Y otra cosa, ¿hay alguien que muestre 10000 registros de una tirada? para algo está la paginación, por lo cual, y basandome en la ignorancia sobre esto, ¿nos sirve mysql_result()?

Gracias de nuevo.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.

Última edición por ferent; 21/11/2003 a las 03:51
  #4 (permalink)  
Antiguo 21/11/2003, 04:30
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Veamos. mysql_query() le manda a MySQL la consulta. mysql_query() entonces espera ha recibir todos los registros y los va almacenando en un buffer temporal (en PHP). Una vez que ha recibido todos los datos, se ejecuta la siguiente linea de codigo despues del mysql_query(). Luego las llamadas a mysql_fetch_*() (y el resto que leen los registros) van leyendo los datos del buffer. Como PHP no sabe cuando vas a acabar de utilizar los datos develtos (puedes usar mysql_data_seek() para volver al principio para volver empezar), pues se lo tienes que decir tu explicitamente para que borre ese buffer. Si no le dices nada, lo borra al final del script.

Y una cosa es mostrar datos, y otra cosa distinta es leerlos. Por ejemplo, los scripts de envio de boletines (aunque es mal ejemplo, ya que tambien se podria "paginar"), donde se recorre la tabla de destinatarios y se le envia un email. Hay procesos en los que tienes que leer muchos registros para realizar con ellos acciones en PHP.

Ademas, he dicho 10000 por decir un numero, para hacer ver el tamaño de los datos leidos de la base de datos.

El objetivo de mysql_free_result() es liberar el buffer cuando nosotros estemos convencidos de que no vamos a neesitarlo mas. Como mysql_close(). Tiene mas significado cuando lo veas en "global". No pienses en los recursos consumidos por un solo script, sino en los que consumen el conjunto de scripts que se ejecutan simultaneamente en el servidor. Haz cuentas: 60 usuarios simultaneamente accediendo a un script de 30 registros de 500 bytes cada registro, son 60x30x500=900000 aprox un mega.

En el entorno web siempre hay que tener en cuenta que son multiples usuarios accediendo quizas simultaneamente. Y en servidores compartidos, quizas debes tener en cuenta tambien los usuarios de las otras webs con las que compartes servidor (no estoy seguro, no se exactamente como esta montado PHP en ese tipo de servidores).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 21/11/2003, 05:17
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 6 meses
Puntos: 0
Efectivamente cada usuario que accede a una web en un servidor compartido consume los recursos de este, pero esto no afecta en absoluto ya que el consumo de tráfico está limitado por dominio a x megas, por lo que nunca un dominio interfiere con otro.

En el caso de que un dominio hospedado en un servidor exceda su tráfico, a éste se le pone una multa de no poco valor.

Un saludo y gracias por la información.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
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 10:57.