Laravel Debugbar를 효과적으로 사용하여 Laravel 애플리케이션에서 N+1 쿼리 문제를 식별하고 다음 단계를 수행하고 제공하는 기능을 이해할 수 있습니다.
n+1 쿼리 문제는 무엇입니까?
N+1 쿼리 문제는 응용 프로그램이 하나의 쿼리를 실행하여 레코드 세트 (N)를 검색 한 다음 각 레코드에 대한 추가 쿼리를 실행하여 관련 데이터를 가져 오면 N+1 쿼리가 발생합니다. 이것은 과도한 데이터베이스 쿼리로 인해 성능 저하로 이어진다 [4] [5].Laravel Debugbar를 사용하여 N+1 쿼리를 감지합니다
- 설치 및 설정 : 먼저 아직 설치되지 않은 경우 작곡가를 통해 Laravel Debugbar를 설치하십시오. Laravel과 완벽하게 통합되며 요청 중에 실행 된 쿼리를 모니터링하는 시각적 인터페이스를 제공합니다 [1] [5].
- 실시간 쿼리 모니터링 : Laravel Debugbar는 쿼리 수 및 실행 시간을 포함하여 요청에서 실행 된 모든 SQL 쿼리를 표시합니다. 이를 통해 많은 유사한 쿼리가 반복적으로 실행될 때 N+1 문제의 특징 [1] [5]를 발견 할 수 있습니다.
- 자세한 쿼리 정보 : Debugbar는 쿼리가 트리거 된 코드의 파일 및 줄 번호를 포함하여 각 쿼리에 대한 자세한 정보를 제공합니다. 이를 통해 N+1 쿼리를 일으키는 정확한 코드를 정확히 찾아냅니다. 이는 대규모 프로젝트에서 매우 중요합니다 [8].
-N+1 쿼리에 대한 사용자 정의 메시지 : Debugbar와 통합되는 Laravel 쿼리 검출기 패키지와 결합하면 Debugbar의 인터페이스 내부에 경고 나 메시지를 추가하여 N+1 쿼리를 명시 적으로 강조 표시 할 수 있습니다. 이 패키지는 관계 쿼리가 임계 값 수 이상으로 실행되는시기를 감지하고 열렬한 로딩을 추가하라는 통지를합니다 [2] [3].
Debugbar를 사용하여 n+1 쿼리를 식별하는 방법
1. 개발중인 디버그 바 활성화 : 로컬 또는 개발 환경에서 디버그 바가 활성화되어 생산에 쿼리 세부 정보를 노출하지 않도록하십시오.
2. 테스트하려는 페이지 나 경로를로드하십시오. N+1 문제가있는 것으로 의심되는 페이지로 이동하십시오.
3. 디버그 바 패널 열기 : 디버그 바 인터페이스 (일반적으로 브라우저 하단)에서 "쿼리"탭으로 이동하십시오.
4. 쿼리 수를 관찰하십시오. 유사하지만 매개 변수 값에 따라 다르면 반복 쿼리를 찾으십시오. 여러 쿼리가 관련 데이터를 하나씩 가져 오는 것을 나타냅니다.
5. 쿼리 기원 확인 : 개별 쿼리를 클릭하여 쿼리가 실행 된 스택 추적 또는 파일/줄 번호를 확인하십시오. 이를 통해 N+1 문제를 일으키는 정확한 루프 또는 코드 섹션을 식별하는 데 도움이됩니다.
6. 경고에 Laravel 쿼리 검출기를 사용하십시오. 선택적으로, n+1 쿼리가 감지 될 때 디버그 바부에 알림을 추가 할 수있는 Laravel 쿼리 검출기 패키지를 설치하여 수동으로 쿼리를 계산하지 않고 쉽게 발견 할 수 있습니다 [3].
식별 후 모범 사례
- 웅변 쿼리에서 eger loading (`with ()`)를 사용하여 관련 모델을 예압하고 쿼리 수를 줄입니다.
-`model :: pronglazyloading (! app ()-> isproduction ())을 추가하여 Laravel의 내장 예방을 사용하여`appserviceprovider '에서 개발 중 게으른로드에 대한 예외를 제외하고 [4] [9]를 조기에 돕습니다.
- 최적의 쿼리 성능을 유지하기 위해 개발 중에 디버그 바로 쿼리를 지속적으로 모니터링합니다.
Laravel Debugbar의 쿼리 시각화를 활용하고 Laravel 쿼리 검출기와 같은 도구를 통합하면 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-problems
[5] https://www.linkedin.com/pulse/handling-n1-query-problem-laravel-developers-haseeb-mushtaq-udusf
[6] https://laraveldaily.com/lesson/laravel-eloquent-expert/n1-query-packages-examples
[7] https://laraveldaily.com/lesson/eloquent-performance/n1-query-debugbar-eger-loading
[8] https://www.reddit.com/r/laravel/comments/5f7y9f/debugging_the_amount_database_queries_per/
[9] https://planetscale.com/blog/what-is-n-1-1-query-problem-and--to-tovol-it