Haben Sie Probleme mit langsamer Performance in Ihrer Laravel-Anwendung? Sie sind nicht allein.
Eine der häufigsten Ursachen für träge Apps sind langsame Datenbankabfragen — und sie frühzeitig zu erkennen kann Ihnen stundenlangem Debugging, Nutzerbeschwerden und Traffic-Verlusten ersparen. Zum Glück macht es Laravel einfach, langsame Abfragen mit nur wenigen Zeilen Code zu protokollieren.
In diesem Beitrag führe ich Sie durch einen schrittweisen Ansatz zur Erkennung und Protokollierung langsamer Abfragen in Laravel — auch wenn Sie nur mit Testdaten üben.
🧠 Warum langsame Abfragen verfolgen?
Bevor wir in den Code einsteigen, verstehen wir warum das wichtig ist:
- 🐢 Langsame Abfragen bremsen Ihre gesamte Anwendung aus
- 🧩 Sie können auf fehlende Indizes, schlechte Abfragestruktur oder unnötige Joins hinweisen
- 💰 In einer Live-App können sie Sie Nutzer — und Umsatz — kosten
Abfragen zu verfolgen und zu protokollieren ist ein kraftvolles Mittel, die Performance Ihrer App unter Kontrolle zu behalten.
🛠️ Schritt 1: Query-Logging in Laravel aktivieren
Fügen Sie in AppServiceProvider.php folgendes zur boot()-Methode hinzu:
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());
});
}
🕐 Dies protokolliert jede Abfrage, die länger als 1000ms (1 Sekunde) dauert.
Sie können den Schwellenwert nach Bedarf anpassen — sogar auf 50ms für Entwicklungsumgebungen.
🧪 Schritt 2: Testdaten erstellen
Verwenden Sie einen Seeder, um einen realistischen Datensatz zu simulieren:
php artisan make:seeder PostSeeder
In PostSeeder.php:
use App\Models\Post;
public function run()
{
Post::factory()->count(10000)->create();
}
Seeder ausführen:
php artisan db:seed --class=PostSeeder
Jetzt hat Ihre Datenbank genug Einträge, um schwere Abfragen zu testen.
⚡ Schritt 3: Eine langsame Abfrage simulieren (zum Testen)
Sie können eine langsame Abfrage über eine einfache Route simulieren:
use Illuminate\Support\Facades\DB;
Route::get('/slow-query', function () {
usleep(2000000); // 2 Sekunden Verzögerung (in Mikrosekunden)
return DB::table('posts')->limit(1000)->get();
});
Oder bei MySQL:
return DB::select('SELECT SLEEP(2), title FROM posts LIMIT 1');
Dies erzeugt eine ausreichend lange Verzögerung, um das Logging auszulösen.
📂 Schritt 4: Die Logs prüfen
Öffnen Sie diese Datei:
storage/logs/laravel.log
Und Sie sehen etwas wie:
[2025-04-04 14:15:22] local.WARNING: ⚠️ Long running queries detected: [...]
Treffer! Sie haben gerade eine langsame Abfrage gefunden.
🔐 Bonus: Vollständiges SQL mit Bindings protokollieren
Möchten Sie exakte SQL-Statements sehen?
DB::listen(function ($query) {
Log::info("SQL: {$query->sql} | Time: {$query->time}ms", $query->bindings);
});
Fügen Sie dies während der Entwicklung zu Ihrem AppServiceProvider@boot() hinzu.
🧩 Praxisanwendungen
- API-Endpoints überwachen, die zu langsam antworten
- Admin-Dashboards mit großen Datensätzen debuggen
- Fehlende Indizes auf häufig genutzten Tabellen aufspüren
✅ Fazit
Laravel gibt Ihnen die Werkzeuge — Sie müssen nur den Schalter umlegen.
Durch die Protokollierung lang laufender Abfragen:
- Gewinnen Sie bessere Einblicke in die Performance Ihrer App
- Verhindern Sie Performance-Engpässe frühzeitig
- Entwickeln Sie effizientere, skalierbarere Anwendungen
🔔 Nächster Schritt: Probieren Sie dies in Ihrem aktuellen Projekt aus und lassen Sie die Logs während der Entwicklung laufen. Sie werden erstaunt sein, wie schnell Sie Muster erkennen.