Следуя примеру кода на http://framework.zend.com/manual/en/zend.db.profiler.html Я настроил профилирование базы данных моего приложения Zend Framework.
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 просто не регистрирует соединение с БД с помощью профилировщика.
Кто-нибудь знает, что здесь происходит?
Я использую адаптер базы данных 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?