PHP相当于MySQL的慢查询日志?

时间:2009-06-04 07:17:40

标签: php mysql optimization

我正在优化我的网站,我已经让MySQL慢查询登录了几天,但在经过> 260M查询后,它只记录了6个慢查询,而那些是特殊的查询执行我在phpMyAdmin上。我想知道是否有什么东西记录缓慢的PHP页面执行时间,以便我可以找到某些占用资源的页面,而不是特定的查询。

5 个答案:

答案 0 :(得分:10)

首先,有xdebug,它有一个分析器,但我不会在生产机器上使用它,因为它会注入代码并带来速度爬行。但非常适合测试环境。

如果您想在高效环境中测量速度,我只需手动测量。 microtime()是PHP中这些东西的功能。假设你有一个header.php和一个footer.php,它被所有 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
);

答案 1 :(得分:5)

auto_prepend_file和auto_append_file怎么样, 刚刚写了一篇关于它的帖子http://blog.xrado.si/post/php-slow-log

答案 2 :(得分:4)

您可以将脚本包装在一个简单的计时器中,如下所示:

/*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";

请注意,这将添加两个函数执行和一小部分数学作为开销。

答案 3 :(得分:1)

你能不注册一个叫定时器结束的关机功能? http://us3.php.net/register_shutdown_function这样你只需要在你认为可能出现问题的地方启动计时器。

答案 4 :(得分:1)

如果您使用FastCGI执行PHP脚本,您可以使用FastCGI Process Manager(FPM,php-fpm),它也支持所谓的“slowlog”。

您可以使用配置选项在php-fpm的php配置中启用它(对于debian,这是在/etc/php5/fpm/pool.d/www.conf中):request_slowlog_timeout和slowlog。

  

request_slowlog_timeout

     

服务单个请求的超时,之后PHP回溯将被转储到'slowlog'文件。值“0”表示   “关”。可用单位:s(秒)(默认),m(inutes),h(我们的)或   天)。默认值:0。

     

slowlog

     

慢速请求的日志文件。默认值:#INSTALL_PREFIX#/ log / php-fpm.log.slow。

来自http://php.net/manual/en/install.fpm.configuration.php

另请参阅:http://php.net/manual/en/install.fpm.phphttp://rtcamp.com/tutorials/php/fpm-slow-log/