Vous luttez contre des performances lentes dans votre application Laravel ? Vous n'êtes pas seul.
L'une des causes les plus courantes d'applications lentes sont les requêtes de base de données lentes — et les identifier tôt peut vous économiser des heures de débogage, des plaintes d'utilisateurs et une perte de trafic. Heureusement, Laravel facilite l'enregistrement des requêtes lentes avec seulement quelques lignes de code.
Dans cet article, je vous guiderai à travers une approche étape par étape pour détecter et enregistrer les requêtes lentes dans Laravel — même si vous pratiquez simplement avec des données fictives.
🧠 Pourquoi Devriez-vous Suivre les Requêtes Lentes ?
Avant de plonger dans le code, comprenons pourquoi c'est important :
- 🐢 Les requêtes lentes ralentissent toute votre application
- 🧩 Elles peuvent indiquer des index manquants, une mauvaise structure de requête ou des jointures inutiles
- 💰 Dans une application en production, elles peuvent vous coûter des utilisateurs — et du chiffre d'affaires
Pouvoir suivre et enregistrer ces requêtes est un moyen puissant de prendre le contrôle des performances.
🛠️ Étape 1 : Activer l'Enregistrement des Requêtes dans Laravel
Dans AppServiceProvider.php, ajoutez ce qui suit à la méthode boot() :
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
public function boot()
{
DB::enableQueryLog();
DB::whenQueryingForLongerThan(1000, function ($connection) {
Log::warning('⚠️ Long running queries detected:', $connection->getQueryLog());
});
}
🕐 Ceci enregistre toute requête prenant plus de 1000ms (1 seconde).
Vous pouvez ajuster le seuil selon vos besoins — même jusqu'à 50ms pour les environnements de développement.
🧪 Étape 2 : Créer des Données Fictives pour les Tests
Utilisez un seeder pour simuler un jeu de données réel :
php artisan make:seeder PostSeeder
Dans PostSeeder.php :
use App\Models\Post;
public function run()
{
Post::factory()->count(10000)->create();
}
Exécutez le seeder :
php artisan db:seed --class=PostSeeder
Maintenant votre base de données a suffisamment d'enregistrements pour tester des requêtes lourdes.
⚡ Étape 3 : Déclencher une Requête Lente (Pour les Tests)
Vous pouvez simuler une requête lente avec une route simple :
use Illuminate\Support\Facades\DB;
Route::get('/slow-query', function () {
usleep(2000000); // 2 secondes de délai (en microsecondes)
return DB::table('posts')->limit(1000)->get();
});
Ou si vous utilisez MySQL, essayez :
return DB::select('SELECT SLEEP(2), title FROM posts LIMIT 1');
Ceci créera un délai suffisant pour déclencher l'enregistrement.
📂 Étape 4 : Vérifier les Logs
Ouvrez ce fichier :
storage/logs/laravel.log
Et vous verrez quelque chose comme :
[2025-04-04 14:15:22] local.WARNING: ⚠️ Long running queries detected: [...]
Voilà ! Vous venez de capturer une requête lente.
🔐 Bonus : Enregistrer le SQL Complet avec les Bindings
Vous voulez voir les instructions SQL exactes ?
DB::listen(function ($query) {
Log::info("SQL: {$query->sql} | Time: {$query->time}ms", $query->bindings);
});
Ajoutez ceci à votre AppServiceProvider@boot() pendant le développement.
🧩 Cas d'Utilisation Réels
- Surveiller les endpoints d'API qui répondent trop lentement
- Déboguer les tableaux de bord admin avec de grands jeux de données
- Détecter les index manquants sur les tables fréquemment utilisées
✅ Récapitulatif
Laravel vous donne les outils — vous n'avez qu'à actionner l'interrupteur.
En enregistrant les requêtes de longue durée :
- Vous obtenez une meilleure visibilité sur les performances de votre application
- Vous prévenez les goulots d'étranglement précocement
- Vous construisez des applications plus efficaces et évolutives
🔔 Prochaine étape : Essayez ceci sur votre projet actuel et gardez les logs actifs pendant le développement. Vous serez étonné de la rapidité avec laquelle vous repérez des schémas.