你知道vBulletin在调试模式下有一个sql profiler吗?我如何为自己的Web应用程序构建一个?它是用程序PHP构建的。
感谢。
答案 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可以帮助您实现这一目标,并且您可以从代码中提取功能部分供您使用。