2009-10-30 5 views
4

디버그 모드에서 vBulletin이 SQL 프로파일 러를 사용하는 방법을 알고 있습니까? 내 웹 응용 프로그램 용으로 구축하는 방법은 무엇입니까? 프로 시저 PHP로 만들어졌습니다.PHP + MySQL 프로파일 러

감사합니다.

답변

7

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 
    } 

} 
3

내가 arround에 프로파일 래퍼를 배치 할 수있는 데이터베이스 연결 래퍼를 사용합니다. 이렇게하면 기본 커넥터 클래스를 변경하지 않고도 래퍼를 삭제하거나 변경할 수 있습니다. 10 초 임계 값 프로파일 링

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

:

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

내가 가지고있는이 시대는 무엇인지()의 error_log를 사용합니다. 데이터베이스 서버 성능에 영향을주는 쿼리 성능을 다시 데이터베이스 서버에 기록하지 않습니다. 웹 헤드가 그 영향을 흡수하도록하는 것이 좋습니다.

+0

microtime()이 서버 시간을 제공하고 실제 작업 시간 (또는 HD 액세스 시간 등)이 아닌 정확한 시간을 제공하기 때문에 정확한 결과를 얻지 못합니다. mysql 내장 함수를 사용하는 것이 가장 좋습니다. 프로세스가 얼마나 오래 걸릴지 –

+0

@mike v : 아주 좋은 지적. mysql 프로파일 러 기능에 대한 링크를 게시 해 주셔서 감사합니다. 자세한 내용을 알게되어 기쁩니다. –

+0

자신 만의 작품을 제작하는 것이 아닙니다. 왜 mysql 느린 쿼리 로그를 사용하지 않습니까? – starmonkey

0

비록 늦어도 Open PHP MyProfiler이이를 달성하는 데 도움이되며 코드에서 기능 섹션을 추출 할 수 있습니다.