2009-06-04 26 views
8

Estoy trabajando en la optimización de mi sitio, y he tenido el inicio de sesión de consultas lentas de MySQL por unos días, pero después de pasar por> 260M de consultas, solo registró 6 consultas lentas, y esas fueron especiales ejecutadas por mí en phpMyAdmin. Me pregunto si hay algo para registrar el tiempo de ejecución lento de la página PHP para que pueda encontrar ciertas páginas que están acaparando recursos, en lugar de consultas específicas.PHP equivalente al registro lento de consultas de MySQL?

+0

Podría ser que las consultas phpMyAdmin son de baja prioridad, que causaría que se presenten como 'lento' – karim79

+0

sólo estaba mencionando que decir que ninguna era una consulta que debía optimizarse en el sitio. –

+2

Si desea mediciones más precisas que en la respuesta aceptada, para encontrar en qué parte de un documento se encuentra su cuello de botella, puede consultar Benchmark from PEAR. Le permite establecer marcadores en su código para encontrar los cuellos de botella. –

Respuesta

10

En primer lugar, está xdebug, que tiene un generador de perfiles, pero no lo usaría en una máquina de producción, ya que inyecta código y lleva la velocidad a un rastreo. Muy bueno para entornos de prueba, sin embargo.

Si desea medir las velocidades en un entorno productivo, simplemente mediría manualmente. microtime() es la función para estas cosas en PHP. Asumiendo que tiene un header.php y una footer.php que consiguen llamado por todos los scripts PHP:

# In your header.php (or tpl) 
$GLOBALS['_execution_start'] = microtime(true); 

# In your footer.php (or tpl) 
file_put_contents(
    '/tmp/my_profiling_results.txt', 
    microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n", 
    FILE_APPEND 
); 
+0

Gracias, su segunda sugerencia es una buena idea. Esperaba que hubiera alguna manera de automatizar esto, pero esto funciona igual de bien sin mucho esfuerzo. –

+0

Oh, una cosa para agregar a esto. Se debe agregar FILE_APPEND como indicador, por lo que no solo obtiene el acceso más reciente en el registro. –

+0

Thx, siempre me olvido de eso :) – soulmerge

4

Usted puede envolver las secuencias de comandos en un simple contador de tiempo, así:

/*in your header or at the top of the page*/ 
$time_start = microtime(true); 

/* your script goes here */ 

/*in your footer, or at the bottom of the page*/ 
$time_end = microtime(true); 
$time = $time_end - $time_start; 
echo "It took $time seconds\n"; 

Nota que agregará dos ejecuciones de función y un poco de matemáticas como sobrecarga.

5

¿qué pasa con auto_prepend_file y auto_append_file, acaba de escribir un post sobre ello http://blog.xrado.si/post/php-slow-log

+0

¿es esta la publicación correcta? http://blog.xrado.si/post/php-slow-log –

+0

sí, tengo un nuevo dominio – xrado

1

Si está usando FastCGI para ejecutar sus scripts PHP puede utilizar el Administrador de procesos FastCGI (FPM, php-FPM), que también es compatible con una llamado "slowlog".

Puede habilitarlo en la configuración php de su php-fpm (para debian esto está en /etc/php5/fpm/pool.d/www.conf) con las opciones de configuración: request_slowlog_timeout y slowlog.

request_slowlog_timeout

El tiempo de espera para servir a una sola petición después de lo cual la traza PHP se vuelca en el archivo 'slowlog'. Un valor de '0' significa 'Desactivado'. Unidades disponibles: s (econds) (predeterminado), m (inutes), h (nuestro) o d (ays). Valor por defecto: 0.

slowlog

El archivo de registro para las solicitudes lentas. Valor predeterminado: # INSTALL_PREFIX #/log/php-fpm.log.slow.

de http://php.net/manual/en/install.fpm.configuration.php

Véase también: http://php.net/manual/en/install.fpm.php y http://rtcamp.com/tutorials/php/fpm-slow-log/

Cuestiones relacionadas