PHP + MySQL探查器

时间:2009-10-30 17:45:21

标签: mysql profiling

你知道vBulletin在调试模式下有一个sql profiler吗?我如何为自己的Web应用程序构建一个?它是用程序PHP构建的。

感谢。

3 个答案:

答案 0 :(得分:7)

http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html

以上链接链接了如何在任何查询后获取sql配置文件信息。

实现它的最佳方法是创建一个数据库类,并让它有一个“profile”标志来打开查询记录和相应的信息,如上面链接所示。

示例:

Class dbthing{
  var $profile = false;

  function __construct($profile = false){
    if($profile){
      $this->query('set profiling=1');
      $this->profile = true;
    }
    ...
  }

  function query($sql, $profile_this == false){
     ...
     if($this->profile && !$profile_this)
        $this->query("select sum(duration) as qtime from information_schema.profiling where query_id=1", true);
     ... // store the timing here
  }

}

答案 1 :(得分:3)

我使用数据库连接包装器,我可以放置一个概要包装器arround。通过这种方式,我可以丢弃包装器或更改它,而无需更改基本连接器类。

class dbcon {
    function query( $q ) {}
}
class profiled_dbcon()
{
    private $dbcon;
    private $thresh;
    function __construct( dbcon $d, $thresh=false )
    {
        $this->dbcon = $d;
        $this->thresh = $thresh;
    }
    function queury( $q )
    { 
        $begin = microtime( true );
        $result = this->dbcon->query();
        $end = microtime( true );
        if( $this->thresh && ($end - $begin) >= $this->thresh ) error_log( ... );
        return $result;  
    }
}

对于具有10秒阈值的分析:

$dbc = new profiled_dbcon( new dbcon(), 10 );

我使用error_log()的时间是多少。我不会将查询性能记录回数据库服务器,这会影响数据库服务器性能。你宁愿让你的网站吸收这种影响。

答案 2 :(得分:0)

虽然很晚,但Open PHP MyProfiler可以帮助您实现这一目标,并且您可以从代码中提取功能部分供您使用。