Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon laraveldebugbarを使用してn 1クエリを識別するにはどうすればよいですか


laraveldebugbarを使用してn 1クエリを識別するにはどうすればよいですか


Laravel Debugbarを使用して、LaravelアプリケーションのN+1クエリの問題を識別し、これらの手順に従って提供する機能を理解することができます。

n+1クエリの問題は何ですか?

n+1クエリの問題は、アプリケーションが1つのクエリを実行してレコードのセット(n)を取得すると発生し、各レコードの追加クエリを実行して関連データを取得し、n+1クエリの合計になります。これにより、データベースクエリが過剰になるため、パフォーマンスの劣化につながります[4] [5]。

laravel debugbarを使用してn+1クエリを検出します

- インストールとセットアップ:最初に、まだインストールされていない場合は、Composerを介してLaravel Debugbarをインストールします。シームレスにLaravelと統合し、リクエスト中に実行されたクエリを監視するための視覚インターフェイスを提供します[1] [5]。

- リアルタイムクエリの監視:Laravel Debugbarには、クエリの数とその実行時間を含む、リクエストで実行されるすべてのSQLクエリが表示されます。これにより、多くの同様のクエリが繰り返し実行されると、N+1の問題の特徴[1] [5]を見つけることができます。

- 詳細なクエリ情報:Debugbarは、クエリがトリガーされたコードのファイルと行番号を含む、各クエリに関する詳細情報を提供します。これにより、N+1クエリを引き起こす正確なコードを特定するのに役立ちます。これは、より大きなプロジェクトで非常に貴重です[8]。

-N+1クエリのカスタムメッセージ:Laravel Query Detectorパッケージ(Debugbarと統合)と組み合わせると、Debugbarのインターフェイス内に警告またはメッセージを追加することにより、N+1クエリを明示的に強調表示できます。このパッケージは、関係クエリがしきい値を回数以上実行されることを検出し、熱心な負荷を追加するように通知します[2] [3]。

Debugbarを使用してn+1クエリを識別する方法

1.開発中のDebugbarを有効にする:生産のクエリの詳細が公開されないように、ローカルまたは開発環境でDebugbarが有効になっていることを確認してください。

2。テストするページまたはルートをロードします。N+1の問題があると疑われるページに移動します。

3。Debugbarパネルを開く:Debugbarインターフェイス(通常はブラウザの下部にある)で、[クエリ]タブに移動します。

4.クエリの数を観察します:類似しているがパラメーター値によって異なる繰り返しクエリを探して、複数のクエリが関連データを1つずつ取得することを示します。

5.クエリのオリジンを確認します:個々のクエリをクリックして、クエリが実行されたスタックトレースまたはファイル/行番号を確認します。これにより、N+1の問題を引き起こす正確なループまたはコードセクションを識別するのに役立ちます。

6.アラートにはLaravelクエリ検出器を使用します。オプションで、N+1クエリが検出されたときにDebugbar内にアラートを追加できるLaravelクエリ検出器パッケージをインストールし、クエリを手動でカウントすることなく見つけやすくなります[3]。

##識別後のベストプラクティス

- 雄弁なクエリでEageRoading( `with()`)を使用して、関連するモデルをプリロードし、クエリの数を減らします。

-LARAVELの組み込み予防を使用して、「モデル:: PreventLazyLoading(!app() - > isProduction())を追加して、開発中の怠zyな読み込みに関する例外をスローし、N+1クエリを早期にキャッチするのに役立ちます[4] [9]。

- 開発中にデバッグバーとのクエリを継続的に監視して、最適なクエリパフォーマンスを維持します。

Laravel Debugbarのクエリの視覚化とLaravel Query Detectorなどのツールを統合することにより、N+1のクエリ問題を効率的に識別および修正し、アプリケーションのデータベースパフォーマンスを大幅に改善できます[1] [2] [3] [5]。

引用:
[1] https://www.luckymedia.dev/blog/laravel-for-beginners-query-performance-issues
[2] https://github.com/beyondcode/laravel-query-detector
[3] https://beyondco.de/docs/laravel-query-detector/usage
[4] https://laravel-news.com/laravel-n1-query-bremss
[5] https://www.linkedin.com/pulse/handling-n1-query-problem-laravel-developers-haseeb-mushtaq-uudusf
[6] https://laraveldaily.com/lesson/laravel-eloquent-expert/n1-query-packages-examples
[7] https://laraveldaily.com/lesson/eloquent-performance/n1-query-debugbar-eager-loading
[8] https://www.reddit.com/r//laravel/comments/5f7y9f/debugging_the_amount_of_database_queries_per/
[9] https://planetscale.com/blog/what-is-n-1-query-breblem-and-how-to-olve-it