Foros del Web » Programando para Internet » PHP »

Saber cuantas consultas se hacen en la BD

Estas en el tema de Saber cuantas consultas se hacen en la BD en el foro de PHP en Foros del Web. Como puedo hago esto? Página generada en 0.65813601 segundos (53.86% PHP - 46.14% MySQL) con 26 consultas a la bd. esto es lo que sale ...
  #1 (permalink)  
Antiguo 28/08/2003, 08:02
Avatar de Slash  
Fecha de Ingreso: agosto-2003
Mensajes: 51
Antigüedad: 20 años, 8 meses
Puntos: 0
Pregunta Saber cuantas consultas se hacen en la BD

Como puedo hago esto?

Página generada en 0.65813601 segundos (53.86% PHP - 46.14% MySQL) con 26 consultas a la bd.

esto es lo que sale en la parte de abajo de la pagina de foros del web y me interesaria saber como se hace.

  #2 (permalink)  
Antiguo 05/09/2003, 07:01
Avatar de Slash  
Fecha de Ingreso: agosto-2003
Mensajes: 51
Antigüedad: 20 años, 8 meses
Puntos: 0
Help me!!
  #3 (permalink)  
Antiguo 06/09/2003, 14:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Mysql tiene algunas funciones para obtener datos estadísticos sobre (por ejemplo) el nº de consultas realizadas hasta el momento desde que se inició .. Toda esa información la puedes obtener ejecutando una consulta (mysql_query() ..) del tipo "SHOW ..." donde los "..." pueden ser vários según los datos que requieras.

mas info sobre este punto en:
http://www.mysql.com/doc/en/SHOW_STATUS.html

Eso sería una solución.. Pero .. si te pones a pensar un poco y estudias que es lo que deseas veras que es cosa de tomar tiempos de inicio y de fin de una llamada a una función y de contar cuantas veces se llama a esa función.

La función en concreto no es más ni menos que:

mysql_query() ...

Si lees la documentación de PHP sobre dicha función, verás que SÓLO puede ejecutar UNA consulta SQL a la BD (a la vez .. no adminte ";" para separar consultas ..) (en este caso Mysql) a la vez .. con lo cual lo tienes más fácil para saber cuantas consultas se han hecho a tu BD .. A todo esto .. para hacer una "consulta" (del tipo que sea: SELECT, INSERT, UPDATE, DELETE .. etc) se ha de "PASAR" por esa función ...

Ahora .. ¿como haces para llevar toda esa contabilidad de llamadas a esa función cada vez que tienes que usarla? .. Bien, si en lugar de en tus scripts usar:

mysql_query("SQL ...."); que es la función de PHP nativa para hacer una consulta SQL a Mysql ..

Usas una función tuya propia que -a su vez- llame a esa función .. podrás "meter" todo la lógica de contabilidad de tiempos o de simple conteo de ejecuciones de esa funcion (lo que implica de "consultas" (query's) ejecutadas) ..

Ejemplo:

Código PHP:
function mi_mysql_query($sql){

// declaración global de mi contador de consultas y el tiempo SQL .. Por poner un ejemplo simple ..
global $consultas_ejecutadas,$tiempo_total_sql ;

// Aquí tu lógica de contabilidad de contador de llamadas .. ejemplo:
$consultas_ejecutadas++;

// Y si sabes que tienes que tomar el tiempo actual ANTES de ejecutar tu consulta y DESPUES de ejecutarla.
// Obtendrás el tiempo que tardó en hacer esa consulta. Y si necesitas tener "totales" .. usa una variable como acomulador:

// tomar el tiempo inicial .. en microsegundos. Se usa la función que describe el manual de PHP sobre microtime .. [url]www.php.net/microtime[/url] para más info ..
$tiempo_inicio=get_microtime();

mysql_query($sql);

// se toma el tiempo final ...
$tiempo_fin=get_microtime();

// y si necesitas .. lo acomulas
$tiempo_total_sql +=$tiempo_inicio-$tiempo_final;


(he omitido en la función el link de conexión .. asumiendose el activo de la conexión establecida ..)

Y .. en lugar ahora de llamar a mysql_query() .. llamo a mi función que "de paso" me hará las estadísticas ..

Código PHP:
mi_mysql_query("SELECT * FROM tabla"); 
En las variables (que declaramos cómo globales) $tiempo_total_sql tendremos el tiempo total dedicado en este script para el SQL (consultas a tu BD) y en $consultas_ejecutadas .. el total de consultas.

El tiempo que tarde PHP usa la misma técnica:
Toma el tiempo al inicio de tu escript (en microsegundos) y al FINAL del script (incluido la lógica de consultas a tu BD que puedas hacer) .. Resta el tiempo que obtendras "total" al del SQL que ya tienes en las variables mencionadas y tendrás los totales de SQL y de PHP (y el total en general) ... Ahí aplicas algo de matemáticas y saca tus porcentajes ..

Todo esto no es más que "la base" .. Si usas cualquier classe de abastracción de BD ya (lease ADOdb .. ezSQL o alguna própia) tal vez ya incluyan esos métodos para hacer el cálculo del tiempo y nº de consulas ejecutadas. Para conseguir el objetivo de todo esto pasa por "centralizar" tus llamadas a tus funciones clásicas Nativas de Mysql (o del manejador de BD que uses).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 06/09/2003 a las 15:01
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 03:57.