PHP + MySQL 分析器

发布于 2024-08-09 16:32:34 字数 91 浏览 4 评论 0原文

你知道 vBulletin 在调试模式下如何拥有 sql 分析器吗?我将如何为我自己的 Web 应用程序构建一个?它是内置于过程 PHP 中的。

谢谢。

You know how vBulletin has a sql profiler when in debug mode? How would I go about building one for my own web application? It's built in procedural PHP.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等风来 2024-08-16 16:32:34

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

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

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

例子:

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
  }

}

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

The above link links how you can get al the sql profile information after any query.

Best way to implement it is to create a database class and have it have a "profile" flag to turn on logging of queries and the appropriate information as shown int he link above.

Example:

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
  }

}
一向肩并 2024-08-16 16:32:34

我使用数据库连接包装器,可以在周围放置分析包装器。这样我就可以丢弃包装器或更改它,而无需更改我的基本连接器类。

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() 来了解时间。我不会将查询性能记录回数据库服务器,这会影响数据库服务器的性能。您宁愿让您的网络头脑吸收这种影响。

I use a database connection wrapper that I can place a profiling wrapper arround. This way I can discard the wrapper, or change it, without changing my base connector class.

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;  
    }
}

For profiling with a 10 second threshold:

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

I have it use error_log() what the times were. I would not log query performance back to the database server, that affects the database server performance. You'd rather have your web-heads absorb that impact.

云裳 2024-08-16 16:32:34

虽然晚了,Open PHP MyProfiler 会帮助你实现这一点,你可以提取代码中的功能部分供您使用。

Though late, Open PHP MyProfiler would help you achieve this, and you can extract functional sections from the code for your usage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文