Отслеживаем медленные запросы в Laravel

Что делать если ваш сайт тупит и не грузится? В первую очередь, следует проверить запросы к базе данных. Сделать это в Laravel можно просто и изящно.

Безусловно, работа сайта зависит от множества причин, но чаще всего проблемы связаны с запросами данных. Дело в том, что при использовании Laravel, как правило, SQL напрямую для получения данных не применяется, так как всё, по сути, оборачивается в Eloquent ORM и конструктор запросов. Это, в свою очередь, не позволяет с высокой степенью точности определить, какой конкретно запрос "подвешивает" веб-сайт.

DB::listen()

Однако вопрос решаем. У нас есть возможность задать колбэк, который станет вызываться каждый раз в случае выполнения запроса к БД (подробности тут).

Итак, давайте добавим определенный код в сервис-провайдер (к примеру, в AppServiceProvider):

В результате мы получили переменную $query, которая представляет собой экземпляр класса QueryExecuted. Эта переменная даст возможность получить необходимую нам дополнительную информацию о выполненном запросе:

Таким образом, используя $query->time, мы отследим медленные запросы.

Источник: https://laravel.io/articles/how-to-find-the-slowest-query-in-your-application.