2011-09-19 2 views

답변

1

현재 프로파일 러를 필터링 할 수있는 방법이 없습니다. 테이블 이름, 쿼리 유형 (INSERT, UPDATE 등) 또는 쿼리 경과 시간 만.

여기에 시도해 볼 수있는 코드가 있습니다. 원하는 것을 수행하는 데 도움이 될 수 있습니다. 테스트하지는 않았지만 잘하면 시작할 수 있습니다.

기본적으로 프로파일 링 된 각 쿼리를 반복하고 preg_match를 사용하여 쿼리가 테이블에 있는지 확인하고 그렇지 않은 경우 쿼리 정보를 설정 해제하고 계속합니다. 그렇다면 일부 통계가 업데이트됩니다. foreach의 끝에 $ 쿼리는 프로필하려는 테이블에 대한 쿼리 만 사용해야합니다.

<?php 
    $tableName = 'my_table'; 

    /** var $profiler Zend_Db_Profiler */ 
    $profiler = $db->getProfiler(); 

    $queries = $profiler->getQueryProfiles(); 

    $totalQueries = 0; 
    $totalTime  = 0; 

    if ($queries !== false) { 
     foreach ($queries as $index => $query) { 
      $queryString = $query->getQuery(); 

      $t = preg_quote($tableName); 

      if (!preg_match("/UPDATE .?$t.? /i", $queryString) || 
       !preg_match("/INSERT INTO .?$t.?/i", $queryString) || 
       !preg_match("/DELETE FROM .?$t.?/i", $queryString) || 
       !preg_match("/REPLACE .*?INTO .?$t.?/i", $queryString) || 
      ) { 
       unset($queries[$index]); 
       continue; 
      } 

      $totalQueries++; 
      $totalTime += $query->getElapsedSecs(); 
     } 
    } 
+0

감사합니다. 나는 이것을 시험해보고 동의 할 것입니다. – geej

+0

여기를 확인하십시오. http://stackoverflow.com/questions/7502515/php-and-zend-db-profiler – geej