Profiling en Drupal

sep 4, 19:14

Si bien Drupal tiene el módulo Devel para hacer profiling a full, también se pueden hacer algunas cosas a mano usando una variable algo escondida en Drupal: $dev_query . Al activarla todas las consultas hechas a través de db_query serán almacenadas en un array ($queries) junto con el tiempo que duró la consulta.

Supongamos que queremos hacer profile de un pedazo de código en Drupal. Al inicio de éste llamamos a una funcion profile_start que active $dev_query y que comience a medir el tiempo que toma en ejecutarse el código.


function profile_start()
{ 
    variable_set('dev_query',1);
     $start = microtime();
}

También podemos usar getrusage() , que nos da muchos más detalles. Internamente db_query() también usa microtime() . Al final del código le diremos que el profiling se detenga con algo cómo:


function profile_stop()
{ 
    $end = microtime();
    global $queries;
    // se procesa la información almacenada por db_query()
    variable_set('dev_query',0);    
}

Hago notar que éste código no es funcional, pero al menos puede dar una buena idea de lo que se necesita hacer. Sería recomendable guardar los resultados obtenidos en una base de datos para procesarlo como queramos. Para que ésto no afecte nuestros resultados ni el rendimiento de nuestra aplicación podemos usar INSERT DELAYED de MySQL, de tal manera que el insert de los resultados se ejecuta en el background y se nos regresa inmediatamente dónde estábamos.

Algunas ideas más para hacer profiling de MySQL en PHP las pueden encontrar en el Capítulo 2 del libro High Performance MySQL (segunda edición): Finding Bottlenecks: Benchmarking and Profiling.

Comentarios

  Ayuda Textile