2011-09-19 77 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

謝謝,我會試試這個和cofirm。 – geej

+0

請點擊這裏:http://stackoverflow.com/questions/7502515/php-and-zend-db-profiler – geej