按照http://framework.zend.com/manual/en/zend.db.profiler.html上的示例代码,我已经设置了我的Zend Framework应用程序的db分析。Zend_Db_Profiler没有记录db连接时间?
的application.ini:
db.profiler.enabled = true
视图助手:
$totalTime = $profiler->getTotalElapsedSecs();
$queryCount = $profiler->getTotalNumQueries();
$longestTime = 0;
$longestQuery = null;
foreach ($profiler->getQueryProfiles() as $query) {
if ($query->getElapsedSecs() > $longestTime) {
$longestTime = $query->getElapsedSecs();
$longestQuery = $query->getQuery();
}
}
echo 'Executed ' . $queryCount . ' queries in ' . $totalTime . ' seconds' . "\n";
echo 'Average query length: ' . $totalTime/$queryCount . ' seconds' . "\n";
echo 'Queries per second: ' . $queryCount/$totalTime . "\n";
echo 'Longest query length: ' . $longestTime . "\n";
echo "Longest query: \n" . $longestQuery . "\n";
它工作正常的选择/插入/更新/删除查询。
但我无法找到探查器来显示启动实际数据库连接所用的时间,尽管文档暗示它记录了这一点。
我怀疑Zend_Db根本没有用分析器记录与db的连接。
有人知道这里发生了什么吗?
我使用的是Oracle数据库适配器,ZF 1.10.1
UPDATE:
我的理解是可以过滤探查器输出,使得其将只显示某些查询类型,例如选择/插入/更新。此外,还似乎是只过滤上网记录的选项:
$profiler->setFilterQueryType(Zend_Db_Profiler::CONNECT);
不过,我的问题是,探查器不记录的连接开始与,所以这个滤镜不起作用。
我知道这是事实,因为如果我打印剖析对象,它包含了许多不同的查询数据 - 但对于连接查询没有数据:
print_r($profiler);
//output Zend_Db_Profiler Object ( [_queryProfiles:protected] => Array ( [0] => Zend_Db_Profiler_Query Object ( [_query:protected] => select * from table1 [_queryType:protected] => 32 [_startedMicrotime:protected] => 1268104035.3465 [_endedMicrotime:protected] => 1268104035.3855 [_boundParams:protected] => Array ( ) ) [1] => Zend_Db_Profiler_Query Object ( [_query:protected] => select * from table2 [_queryType:protected] => 32 [_startedMicrotime:protected] => 1268104035.3882 [_endedMicrotime:protected] => 1268104035.419 [_boundParams:protected] => Array ( ) ) ) [_enabled:protected] => 1 [_filterElapsedSecs:protected] => [_filterTypes:protected] => )
难道我做错了什么 - 或者记录的连接尚未添加到Zend Framework中?
虽然这是我的问题 - 这不适合我!没有记录连接记录,所以不需要过滤。我会尝试更新我的问题,以提供更多信息。 – asgeo1 2010-03-09 02:50:48
看起来,Oracle适配器似乎没有向Profiler进行相关的调用以进行连接。比较Zend_Db_Adapter_Pdo_Abstract和Zend_Db_Adapter_Oracle中的_connect()方法,在创建连接前,前者调用: $ q = $ this - > _ profiler-> queryStart('connect',Zend_Db_Profiler :: CONNECT); 之后: $ this - > _ profiler-> queryEnd($ q); Oracle适配器没有引用profiler(至少到版本1.10.2),但我想它可能就像在_connect()方法中添加等效调用一样简单。 – 2010-03-09 16:16:25