Profiler les requêtes SQL de son application avec Zend_Db_Profiler_Firebug

Objectif

Le composant Zend_Db_Profiler du Zend Framework permet de profiler les requêtes exécutées sur la base de données d’une application.

On obtient ainsi pour chaque page la liste des requêtes ainsi que leurs temps d’exécution respectifs, et ceci sans avoir à ajouter une ligne de code aux classes inspectées.

Le profileur spécialisé Zend_Db_Profiler_Firebug propose quand à lui d’envoyer ces informations directement dans la console de Firebug.

Voyons ici comment le mettre en place dans le bootstrap afin de profiler nos requêtes.

Pré-requis

  • ZF, version supérieure à 1.6 (ici la version 1.9.4) ;
  • Firefox, version 2 ou 3 ;
  • Extension Firefox Firebug ;
  • Extension Firefox FirePHP.

Mise en place

Pour la suite, on supposera que votre application définie sa connexion à la base de données via un fichier de configuration du type mon_projet/application/configs/application.ini :

[production]
...
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
...
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "user"
resources.db.params.password = "password"
resources.db.params.dbname = "dbname"
[testing : production]
...
[development : production]
...

Votre fichier /mon_projet/public/index.php utilise un bootstrap pour initialiser l’application avant de dispatcher les requêtes HTTP :

...
require_once 'Zend/Application.php';  
$application = new Zend_Application(APPLICATION_ENV,
                                    APPLICATION_PATH.'/configs/application.ini');
$application->bootstrap()->run();
...

Enfin, voici comment définir l’utilisation du profileur Firebug au moment de l’initialisation de l’adapteur à la base de données dans mon_projet/application/Bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    ....
    /**
     * Configurer l'adapteur à la base de données
     * @return Zend_Application_Resource_Db
     */ 
    protected function _initDb() {
        $db = $this->getPluginResource('db');
        if (APPLICATION_ENV == 'development') {
            $profiler = new Zend_Db_Profiler_Firebug('Toutes les requêtes');
            $profiler->setEnabled(true);
            $db->getDbAdapter()->setProfiler($profiler);
        }
        Zend_Db_Table_Abstract::setDefaultAdapter($db->getDbAdapter());
        return $db;
    }
    ....
}

Désormais, chaque requête exécutée sur l’environnement de développement sera profilée.

Il ne reste plus qu’à autoriser votre site à échanger des informations avec FirePHP :

  • Se rendre sur l’onglet console de FireBug et l’activer ;
  • Ajouter l’hôte via le menu de FirePHP > Allowed Sites ; menu-firephp

Pour tester, chargeons une page dont la construction nécessite l’exécution de requêtes :

logguer-requetes-sql-avec-zend-db-profiler-firebug

Pour aller plus loin

Zend_Db_Profiler permet également de filtrer les requêtes logguées par leur temps d’exécution ou encore par leur type (select, insert, etc), pour se faire, se référer à la documentation du composant.

Ressources complémentaires

Zend Framework , , Permalien.

3 Responses to Profiler les requêtes SQL de son application avec Zend_Db_Profiler_Firebug

  1. Wixiweb says:

    Bonjour, vous pouvez également mettre ça en place à la création de votre connexion et en le paramétrant directement dans votre application.ini

    Extrait de application.ini

    [development : production]
    # Connexion à la base de données
    database.adapter = "Mysqli"
    database.params.charset = "UTF8"
    database.params.host = "127.0.0.1"
    database.params.dbname = "cbhsdb"
    database.params.username = "root"
    database.params.password = ""
    database.params.profiler.enabled= 1
    database.params.profiler.class = "Zend_Db_Profiler_Firebug"

    Extrait de bootstrap.php

    protected function _initDb()
    {
    // Paramètres de base de données
    $database_config = $this->getOption('database');

    // Création de la connexion en base de donnée à partir du config
    $db = Zend_Db::factory($database_config['adapter'],
    $database_config['params']);

    // ... //

    return $db;
    }

  2. Wixiweb says:

    Bonjour, vous pouvez également mettre ça en place à la création de votre connexion et en le paramétrant directement dans votre application.ini

    Extrait de application.ini

    [development : production]
    # Connexion à la base de données
    database.adapter = "Mysqli"
    database.params.charset = "UTF8"
    database.params.host = "127.0.0.1"
    database.params.dbname = "mydb"
    database.params.username = "root"
    database.params.password = ""
    database.params.profiler.enabled= 1
    database.params.profiler.class = "Zend_Db_Profiler_Firebug"

    Extrait de bootstrap.php

        protected function _initDb()
        {
            // Paramètres de base de données
            $database_config = $this->getOption('database');
    
            // Création de la connexion en base de donnée à partir du config
            $db = Zend_Db::factory($database_config['adapter'],
                                   $database_config['params']);
    
            // ... //
    
            return $db;
        }
    
  3. Nicolas says:

    Merci de l’info ! :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">