Foros del Web » Programando para Internet » PHP »

Sobrecarga

Estas en el tema de Sobrecarga en el foro de PHP en Foros del Web. Tengo un sitio php con 32 tablas en una base de datos mysql, la web es dinamica y la base de datos ocupa solo 1 ...
  #1 (permalink)  
Antiguo 16/10/2005, 08:55
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Sobrecarga

Tengo un sitio php con 32 tablas en una base de datos mysql, la web es dinamica y la base de datos ocupa solo 1 mega.
En cada pagina la web realiza unas 4 consultas a la base de datos usando un index id para restringir las busquedas y no recorrer todos los campos.

La tabla que mas filas tiene es de 404 filas el resto ni siquiera llega a las 100 filas.

Ejemplo de Query:

$_pagi_sql="SELECT default_lang FROM cms_system_ where username='$username'";
$resultado=mysql_query($_pagi_sql, $conn);
while($salida = mysql_fetch_array($resultado))
{
$lang=$salida[0];
}


otras querys son asi:

$_pagi_sql="SELECT * FROM cms_system_ where username='$username'";
$resultado=mysql_query($_pagi_sql, $conn);
while($salida = mysql_fetch_array($resultado))
{
$lang=$salida[0];
....
}

Puede probocar sobrecarga en el servidor consultas a una base de datos tan pequeña?.

Y en el .htacces tengo 22 kb de rewrite_rule.

Saben tecnicas para mejorar el rendimiento de los script y evitar sobrecarga?

Un Saludo

Última edición por Taurus427; 16/10/2005 a las 09:07
  #2 (permalink)  
Antiguo 17/10/2005, 05:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Una "sobrecarga" en general se mide en función de las características de tu sistema .. En tu caso de tu servidor .. Ten presente que si yo ejecuto esa aplicación en un "servidor" de prestaciones reducidas .. no sé, digamos un "PII"? .. pues seguro que mi sistema ya se verá "sobrecargado" con ese pequeño sistema, pero si lo ejecuto en un "Xeon doble procesador" .. pues seguro que mi sistema anda mejor y no se siente "sobrecargado".

-------

Ahora .. sobre "optimización" de tu sistema y modelo de datos podríamos hablar mejor. No indicas el modelo de datos que usas (tus "32" tablas y sus relaciones) .. pero por ahí es probable que algo se pueda hacer.

Por lo poco de código que indicas .. ahí cosas que no son correctas para el caso que lo usas:

No sé si de esas consulta SQL esperas obtener un sólo registro (supongo que sí por el "WHERE" que haces) .. pero si es así .. no es necesario que uses un bucle while() para recorrer sus resultados si sólo sabes que vas a obtener UN sólo registro como resultado. En ese caso puedes usar simplemente mysql_fetch_row()

Por lo demás .. tampoco sé si realmente necesitas TODOS los campos (columnas) de ese posible resultado o sólo una. Si fuese así, puedes usar simplemente: mysql_result() en luegar del mysql_fetch_xxxx() ... (el segundo ejemplo que pusistes deberías usar el mysql_result())

Un saludo,
  #3 (permalink)  
Antiguo 17/10/2005, 08:05
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Hola Cluster, los datos de la base de datos en su mayoria son del tipo varchar y text, las consultas hay algunas que solo necesito obtener un unico resultado y otras como sistema de noticias galerias, etc.. que necesita obtener mas de un resultado por eso el while. Para las consultas que necesito solo uans cuantas columnas las indico en el select .... from pero a uso mysql_fetch_array, no se si con eso ya estoy eliminando el select .... from y lo estoy automaticamente convirtiendo en un select * from

Otra pregunta en el segundo ejemplo me dices que utilice mejor esto:
$_pagi_sql="SELECT * FROM cms_system_ where username='$username'";
$resultado=mysql_query($_pagi_sql, $conn);
while($salida = mysql_result($resultado))
{
$lang=$salida[0];
....
}

Es más optimo asi? Otra cosa que hago siempre es liberar las consultas
mysql_free_result($resultado); no se si eso es peor que no ponerlo es mejor poner mysql_free_result($resultado); ?

Y tengo otro tipo de consultas sin while asi:
$_pagi_sql="SELECT cid FROM cms_system_album where language='$lang' and id='$id' and id_usuario='$idel_user'";
$resultado=mysql_query($_pagi_sql, $conn);
$salida= mysql_fetch_array($resultado);
$catid=$salida['0'];

Por lo que me dices debo de ponerla mejor asi?:
$_pagi_sql="SELECT cid FROM cms_system_album where language='$lang' and id='$id' and id_usuario='$idel_user'";
$resultado=mysql_query($_pagi_sql, $conn);
$salida= mysql_result($resultado);
$catid=$salida['0'];

Es que me gustaria optimizar al maximo mi sistema para que haga trabajar lo minimo imprescindible a la base de datos.

En realidad como digo solo hace como mucho 4 0 5 consultas por pagina a la base de datos, pero claro el tema es hacer correctamente esas consultas para que coja solo lo necesario en cada caso.

Espero me puedan ayudar y Muchas Gracias de nuevo.
  #4 (permalink)  
Antiguo 17/10/2005, 09:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Otra pregunta en el segundo ejemplo me dices que utilice mejor esto:
$_pagi_sql="SELECT * FROM cms_system_ where username='$username'";
$resultado=mysql_query($_pagi_sql, $conn);
while($salida = mysql_result($resultado))
{
$lang=$salida[0];
....
}

Es más optimo asi? Otra cosa que hago siempre es liberar las consultas
mysql_free_result($resultado); no se si eso es peor que no ponerlo es mejor poner mysql_free_result($resultado);
Ahí me equivoqué .. me refería al primer código:

Código PHP:
$_pagi_sql="SELECT cid FROM cms_system_album where language='$lang' and id='$id' and id_usuario='$idel_user'";
// ejecutar consulta SQL
$_pagi_result=mysql_query($_pagi_sql);
// Contar resultados (se espera 1 o 0 resultados)
if (mysql_num_rows($_pagi_resul) == 1){
    
// Si hay resultados .. entonces accedes a el .. 
    
$catid=mysql_result($_pagi_result"cid");
} else {
  echo 
"No hay resultados";

En ese caso .. sólo obtienes un resultado posible o ninguno (pero no más). por eso puedes acceder directamente al resultado obtenido .. Si fuese más de un campo .. te resultaría mejor usar mysql_fetch_row() o _assoc() ...

Un saludo,
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 12:48.