Langzame queries debuggen in Laravel

Langzame queries debuggen in Laravel
published 10-06-2023

Artikel hoe je langzame queries kan debuggen/tracken in Laravel.

Met de Laravel Debug Bar kan je bij het ontwikkelen kijken welke queries problemen geven zoals de N+1 maar ook de snelheid zodat je kan zien dat je een index bent vergeten te zetten.

Screenshot Laravel debug bar om langzame queries op te sporen

Automatisch langzame queries loggen

Alleen moet je hier wel actief naar kijken en op productie heb je deze debug bar uiteraard niet. In `app/Providers/AppServiceProvider.php` kan je een functie zetten die alle queries teruggeeft. Hierbij ook de 'time' hoe lang hij over de query heeft gedaan, mooi dus om hier trage queries te gaan tracken.

Voorbeeld wat je terug krijgt

<!--?php 
Illuminate\Database\Events\QueryExecuted {#535 ▼
  +sql: "select * from `users` where `id` = ? and `users`.`deleted_at` is null limit 1"
  +bindings: array:1 [▶]
  +time: 2.76
  +connection: Illuminate\Database\MySqlConnection {#534 …24}
  +connectionName: "mysql"
[/code]&lt;/pre&gt;
&lt;p&gt;In de boot methode kan je de functie `DB::listen` listen gebruiken.&lt;br ?-->
Hier onder een voorbeeld hoe ik deze gebruik in een project. Ik gebruik <a href="https://spatie.be/docs/ray/v1/introduction" target="_blank" rel="noopener">Ray (van Spatie)</a> als debug logger maar je kan natuurlijk ook de Log functie van Laravel zelf gebruiken.</pre>

Ikzelf gebruik Honeybadger als error tracking applicatie. Hier laat ik ook de meldingen van trage queries op binnenkomen.

Mijn DB::listen in de boot method()

<?php 
/** * Bootstrap any application services. */
public function boot(): void { DB::listen(function($query) { if ($query->time > 500) {

            $queryInfo = [
                'sql' => $query-&gt;sql,
                'binding' => $query-&gt;bindings,
                'time' => $query-&gt;time
            ];

            match(app()->environment('production')) {
                true => Log::channel('honeybadger')-&gt;error('Slow query', $queryInfo),
                false => ray('Slow query', $queryInfo)
            };
        }
    });
}

Webbouwplus

Marcel van Doornen - Laravel Freelance developer
Marcel van Doornen, freelance Laravel developer. Ben je benieuwd hoe ik jou kan helpen?
Neem contact met mij op
©2025 Webbouw Plus