Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/09/2003, 14:58
Cluster
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