Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon n 1 쿼리 문제의 일반적인 징후는 무엇입니까?


n 1 쿼리 문제의 일반적인 징후는 무엇입니까?


N+1 쿼리 문제의 일반적인 징후에는 다음과 같은 자세한 지표가 포함됩니다.

- 과도한 쿼리 수 : 가장 분명한 부호는 응용 프로그램이 예상보다 많은 데이터베이스 쿼리를 실행한다는 것입니다. 일반적으로 레코드 목록을 가져 오기 위해 하나의 초기 쿼리가 표시된 다음 각 레코드에 대한 추가 쿼리를 통해 관련 데이터를 가져옵니다. 예를 들어, 10 명의 사용자를 가져온 다음 10 개의 개별 쿼리를 실행하여 각 사용자의 게시물을 하나의 최적화 쿼리 대신 11 개의 쿼리로 가져옵니다 [1] [3].

- 응용 프로그램 응답 시간 속도가 느립니다. 각 쿼리에는 데이터베이스로의 왕복이 필요하기 때문에 많은 작은 쿼리의 누적 효과는 데이터 검색을 크게 느리게합니다. 이로 인해 페이지로드 또는 API 응답이 느려져 응용 프로그램이 사용자 요청에 대한 응답이 적습니다 [1] [5].

- 높은 데이터베이스로드 : 데이터베이스 서버가 많은 수의 쿼리로 인해 부하가 증가하여 자원을 변형시키고 시스템의 전체 처리량을 줄일 수 있습니다. 이는 사용자 또는 데이터 수가 증가함에 따라 성능을 저하시키고 확장 성을 제한 할 수 있습니다 [3] [5] [6].

- 느린 쿼리 로그에서 보이지 않음 : 단일 느린 쿼리와 달리 N+1 문제는 종종 각 개별 쿼리가 빠르게 실행되기 때문에 느린 쿼리 로그에서 눈에 띄지 않습니다. 그러나 많은 쿼리의 집계 효과는 성능 저하를 일으킨다 [2].

- ORM에 의해 트리거되지 않은 예기치 않거나 숨겨진 쿼리 : ORM (Object-Relational Mapping) 프레임 워크를 사용할 때 N+1 문제는 게으른로드 또는 오해로 인해 종종 발생합니다. 루프에서 관련 엔티티에 액세스하면 코드에서 명시적인 호출없이 추가 쿼리를 트리거 할 수 있으므로 소스 코드를 살펴보면 감지하기가 어렵습니다 [2] [5] [6].

- 데이터 가져 오기 패턴의 성능 병목 현상 : 응용 프로그램에 복잡한 객체 관계가 있고 단일 최적화 된 쿼리가 아닌 여러 단계로 관련 데이터를 가져 오면이 패턴은 N+1 문제의 강력한 지표입니다 [6].

요약하면, 공통 부호는 간단한 데이터 검색, 여러 데이터베이스 라운드 트립으로 인한 간단한 데이터 검색, 느린 응답 시간, 데이터베이스 서버의로드 증가 및 각 Query가 개별적으로 실행되기 때문에 문제를 발견하는 데 어려움이있는 데 대한 예기치 않게 많은 데이터베이스 쿼리입니다. 이러한 증상은 기본 게으른 하중 거동을 가진 ORM을 사용하는 응용 분야에서 특히 널리 퍼져 있습니다 [1] [2] [3] [5] [6] [7].

인용 :
[1] https://planetscale.com/blog/what-is-n-1-1-query-problem-and-to-to-tovit-it
[2] https://stackoverflow.com/questions/97197/what-is-n1-selects-problem-in-orm-relational-mapping
[3] https://www.pingcap.com/article/how-to-efficively-solve-the-n1-query-problem/
[4] https://evnedev.com/blog/development/the-the-n1-query-problem-what-is-in-in-do-do-you--ist/
[5] https://digma.ai/n1-query-problem-and-how-to-detect-it/
[6] https://www.neurelo.com/post/what-is-the-n-1-1-query-problem
[7] https://dev.to/lovestaco/the-n1-query-problem-the-performance-killer-2b1c
[8] https://www.pullrequest.com/blog/avoiding-n-1-database-queries-in-asp--practical-guide/