Zend Framework Tips&Trick: DbProfiler
Rozmawiając ostatnio z ludźmi z branży (np. podczas interview), którzy zarzekają się, że znają i korzystają z Zend Framework okazuje się, że ich wiedza kończy się często na etapie wklepywania kodu do kontrolera.
Dlatego postanowiłem, że różnymi banalnymi, ale użytecznymi rzeczami z ZF będę dzielił się z Wami na moim blogu.
Wczoraj chciałem zoptymalizować bazę i musiałem zobaczyć dokładne zapytania SQL, które idą do bazy zewn. i ich czasy wykonywania.
Z samymi zapytaniami może nie byłoby problemu dla początkującego programisty z wykorzystaniem ZF – wystarczy jakieś wyplucie obiektów Zend_Db_Select na ekran, ale czasy trwania ?
Z pomocą przychodzi nam pakiet Zend_Db_Profiler. Aby nie śmiecić sobie na ekranie aplikacji, polecam zainstalować FirePHP dla Firefoksa, wtedy możemy skorzystać z Zend_Db_Profiler_Firebug i w wyniki przeglądać w konsoli Firebug’a. Poniżej przedstawiam wtyczkę:
class Zextend_Controller_Plugin_DbProfiler extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$profiler = new Zend_Db_Profiler_Firebug('DB - All Queries');
$profiler->setEnabled(true);
$db->setProfiler($profiler);
}
}
Następnie wystarczy w pliku konfiguracyjnym naszej aplikacji (configs/application.ini) włączyć działanie wtyczki:
resources.frontController.plugins.dbProfiler = "Zextend_Controller_Plugin_DbProfiler"
Od tego momentu w Firebugu zobaczymy wszystkie zapytania SQL, które idą do bazy wraz z ich parametrami i czasami wykonywania.

wynik w Firebug









Ksok
28 wrz, 2009
Można to samo zrobić w bootstrapie.
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Database profiler
*/
public function _initDbProfiler()
{
Ksok_Log::info(‘Bootstrap ‘ . __METHOD__);
if(‘production’ !== $this->getEnvironment()){
$this->bootstrap(‘db’);
$profiler = new Zend_Db_Profiler_Firebug(‘All DB Queries’);
$profiler->setEnabled(true);
$this->getResource(‘db’)->setProfiler($profiler);
}
}
matipl
28 wrz, 2009
@ksok: wszystko można zrobić w klasie Boostrap, a najlepiej w pliku index.php
Ale nie o to chodzi…
jaras
3 paź, 2009
Rozwiązanie rewelacyjne, szybko można sprawdzić i poprawić, które zapytanie spowalnia nam aplikację
Marcin
17 sty, 2010
Rozwiązanie przydatne i sprawdzone. Ja polecam ze swojej strony ZFDebug. Nie zasmieca specjalnie widoku, a i działa w różnych przeglądarkach.
czarnyleon
26 sty, 2010
Witam.
Nie łatwiej dodać jedynie dwie linie do pliku application.ini?
resources.db.params.profiler.class
= Zend_Db_Profiler_Firebug
resources.db.params.profiler.enabled = true
matipl
26 sty, 2010
@czarnyleon: oczywiście, że można. To zależy jak bardzo chcemy ingerować w to co robi profiler.
mits
15 mar, 2011
jest też plugin ZFDebug który posiada to w sobie oraz kilka innych ciekawych rzeczy – http://code.google.com/p/zfdebug/
matipl
16 mar, 2011
@mits: ciekawe, ale piękne były czasy kilka lat temu, gdy Zend Studio było własnym projektem Zenda (przed Eclipse) i posiadało świetną zewn. wtyczkę do przeglądarki.