Améliorer les performances avec Zend_Db_Profiler_Firebug

Logo Zend Framework

Le nombre et la qualité des requêtes SQL ont souvent un impact considérable sur les performances d'un site. Le Zend Framework dispose d'un composant très pratique nommé Zend_Db_Profiler_Firebug qui permet d'afficher le temps d'exécution des différentes requêtes exécutées pour afficher une page.

Comme son nom l'indique, Zend_Db_Profiler_Firebug utilise l'excellent Firebug pour afficher ses informations. Vous devez donc l'installer cette extension Firefox ainsi que FirePHP avant de pouvoir utiliser ce composant.

Il faut ensuite ajouter les lignes suivantes dans votre bootstrap :

if ($this->_environment == 'development') {
    $profiler = new Zend_Db_Profiler_Firebug('Requêtes');
    $profiler->setEnabled(true);
    Zend_Db_Table_Abstract::getDefaultAdapter()->setProfiler($profiler);
}

Vous pouvez également l'activer lors de la création de votre adaptateur de base de données :

$db = Zend_Db::factory('Pdo_Mysql',
    array(
        ...
        'profiler' => array(
            'enabled' => true,
            'class' => 'Zend_Db_Profiler_Firebug'
        )
    )
);

Vous obtiendrez ainsi l'affichage suivant dans la console Firebug :

Les requêtes SQL affichées dans Firebug avec Zend_Db_Profiler_Firebug

Les requêtes qui prennent le plus de temps pourront alors être placées en cache ou optimisées. Pour mémoire, les principaux points à examiner pour améliorer les performances d'une requête SQL sont, par ordre d'importance :

  • L'indexation. Si votre requête est un SELECT, il peut être intéressant d'ajouter des index à vos tables. Utilisez la commande EXPLAIN de MySQL pour analyser votre requête.
  • La normalisation (ou la dénormalisation). La normalisation est théoriquement plus efficace mais si votre requête comporte beaucoup de JOIN, il peut être utile de dénormaliser. Mais attention, les insertions/mise à jour deviennent plus compliquées.
  • Le type et le jeu de caractère des colonnes. Il faut choisir ce qui est le mieux adapté à vos données. La commande ANALYSE de MySQL peut vous fournir de précieuses informations.

Quelques articles et sites qui traitent d'optimisation des requêtes SQL

  • http://www.mysqlperformanceblog.com/
  • http://www.howtodothings.com/computers-internet/how-to-optimize-mysql-queries
  • http://www.techfounder.net/2008/10/12/profiling-queries-with-zend_db-and-optimizing-them-by-hand/

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account, used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.