2012-10-22 4 views
0

페이지 요청 당 얼마나 많은 SQL 쿼리가 실행되는지 알고 싶습니다. 사이트가 이미 완료되었으므로 최적화 분석을 실행 중이므로 제공되는 솔루션에서 전체 웹 사이트 구조를 변경해야한다고 제안합니다. 페이지 요청 당 쿼리 수를 계산 하시겠습니까?

나는 MySQL 데이터베이스에 대한 모든 쿼리를 전송하는 하나의 연결을 사용 : 얼마나 많은 쿼리를 계산하는 방법이 있나요

$query = "SELECT * FROM `sometable`"; 
$queryRun = $DB_CONNECTION->query($query); 

:

define('DATABASE_SERVER', '127.0.0.1'); 
define('DATABASE_NAME', 'foco'); 
define('DATABASE_USERNAME', 'root'); 
define('DATABASE_PASSWORD', ''); 

$DB_CONNECTION = new mysqli(
    DATABASE_SERVER, 
    DATABASE_USERNAME, 
    DATABASE_PASSWORD, 
    DATABASE_NAME, 
    3306 
); 

그리고 내가 사용하는 쿼리를 실행하는 php가 연결을 닫기 직전에 텍스트 파일로 응답을 기록합니까?

답변

4

당신은 mysqli 개체를 확장하고 쿼리 메소드를 오버라이드 (override) 할 수 있습니다

class logging_mysqli extends mysqli { 
    public $count = 0; 
    public function query($sql) { 
     $this->count++; 
     return parent::query($sql); 
    } 
} 

$DB_CONNECTION = new logging_mysqli(...); 
1

가장 좋은 방법 중 하나는 $DB_CONNECTION->query() 내부에서 로그 기능을 실행하는 것입니다.

그런 식으로 각 개별 쿼리를 db 테이블에 기록하거나 쿼리 속도에 대한 기본 테스트를 수행 한 다음이 값을 저장하거나 카운트를 증가시켜 쿼리를 저장할 수 있습니다.

+0

나는 어떻게해야합니까? query() 함수는 MySQLi 클래스의 일부입니다. –

+0

@Sjoerd의 아래 답변은 모두 당신을 위해 분류되어 있습니다. 그걸로가. – firecracker

0

mysqli를 확장 클래스를 만들고, 그 클래스의 $ DB_CONNECTION 객체를 만들고 query() 방법의 구현에 통계를 않습니다. 결국 실제 업무를 수행하려면 parent::query()으로 전화해야합니다.

0

대신 직접 mysqli의 사용 프록시 만들기 ...

class DatabaseCounter { 
    private $querycount = 0; 
    private $mysqli = null; 

    // create mysqli in here in constructor 


    public function query(...) { 
     $this->queryCount++; 
     $this->mysqli->query(...); 
    } 
} 

$DB_CONNECTION = new DatabaseCounter(); 
관련 문제