Mateusz matipl Kamiński: o programowaniu (m.in. PHP), Apple (iPhone, iPad), usługach Google i finansach

Zend Framework Tips&Trick: DbProfiler

Zend FrameworkRozmawiają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

wynik w Firebug


Podobne wpisy:

CZYTAJ PRZEZ RSS

  • 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);
    }
    }

  • @ksok: wszystko można zrobić w klasie Boostrap, a najlepiej w pliku index.php ;) Ale nie o to chodzi…

  • Rozwiązanie rewelacyjne, szybko można sprawdzić i poprawić, które zapytanie spowalnia nam aplikację :D

  • Rozwiązanie przydatne i sprawdzone. Ja polecam ze swojej strony ZFDebug. Nie zasmieca specjalnie widoku, a i działa w różnych przeglądarkach.

  • 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

  • @czarnyleon: oczywiście, że można. To zależy jak bardzo chcemy ingerować w to co robi profiler.

  • jest też plugin ZFDebug który posiada to w sobie oraz kilka innych ciekawych rzeczy – http://code.google.com/p/zfdebug/

  • @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.

Możesz śledzić odpowiedzi za pomocą kanału RSS 2.0