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