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.