Como detectar e corrigir operações de banco de dados lentas no Laravel

Neste tutorial, mostraremos como diagnosticar e lidar com operações de banco de dados lentas no Laravel 10 . Começaremos identificando culpados comuns de desempenho lento do banco de dados, como consultas ineficientes e tabelas não indexadas. Você aprenderá como usar as ferramentas integradas do Laravel, como o log de consulta e o log de consulta lenta, para identificar áreas específicas de seu aplicativo que estão causando gargalos.

Uma maneira de verificar consultas lentas é usar o log de consultas lentas, que ajuda a identificar consultas que demoram muito para serem executadas. O log de consultas lentas é uma ferramenta útil para localizar consultas lentas e deve ser usado. No entanto, às vezes você só quer ser notificado quando algo der errado para que possa identificar e corrigir rapidamente o problema. É aí que um novo utilitário de banco de dados no Laravel 10 pode ser realmente útil.

Para começar, você precisa configurar o  DB::whenQueryingForLongerThan no  boot método do seu aplicativo  AppServiceProvider da mesma forma.

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\Log;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        DB::whenQueryingForLongerThan(500, function (Connection $connection) {
            Log::warning("Database queries exceeded 5 seconds on {$connection->getName()}");

            // or notify the development team...
        });
    }
}

Depois de configurá-lo, o whenQueryingForLongerThan método executará uma ação específica se uma consulta ao banco de dados demorar mais de 5 segundos durante uma solicitação ou tarefa.

É importante observar que esse método funciona por conexão, o que significa que você receberá informações detalhadas sobre a conexão específica que apresentou lentidão.

Se você deseja executar um retorno de chamada quando uma  única  consulta leva muito tempo, pode fazer isso com um  DB::listen retorno de chamada.

use Illuminate\Support\Facades\DB;

public function boot()
{
    // Log a warning if we spend more than 1000ms on a single query.
    DB::listen(function ($query) {
        if ($query->time > 1000) {
            Log::warning("An individual database query exceeded 1 second.", [
                'sql' => $query->sql
            ]);
        }
    });
}

E isso é tudo! Este é um método rápido e simples para receber notificações sobre operações lentas do banco de dados no Laravel 10.

1.00 GEEK