Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon N 1 쿼리 문제로 이어지는 일반적인 실수는 무엇입니까?


N 1 쿼리 문제로 이어지는 일반적인 실수는 무엇입니까?


N+1 쿼리 문제로 이어지는 일반적인 실수는 일반적으로 데이터베이스에서 데이터가 어떻게 가져 오는지, 특히 ORM (Object-Relational Mapping) 프레임 워크를 사용할 때 또는 수동으로 데이터베이스 쿼리를 쓰는 경우를 중심으로 진행됩니다. 다음은 이러한 실수에 대한 자세한 설명입니다.

** 1. 관련 데이터를 별도의 쿼리로 가져옵니다
N+1 쿼리 문제의 주요 원인은 코드를 구성하여 먼저 하나의 쿼리로 레코드 목록을 검색 한 다음 각 레코드에 대한 추가 쿼리를 실행하여 관련 데이터를 가져 오는 것입니다. 예를 들어, 사용자 목록을 쿼리 한 다음 각 사용자에 대한 게시물을 별도로 쿼리하면 사용자가 1 개의 쿼리와 게시물에 대한 n 쿼리가 나타납니다. 여기서 n은 사용자 수입니다. 이것은 하나의 최적화 된 쿼리 대신 많은 작은 쿼리로 이어진다 [1] [2] [3] [7].

** 2. 기본적으로 게으른 하중에 의존합니다
대부분의 ORM은 기본 페치 전략으로 게으른로드를 사용합니다. 즉, 관련 엔티티는 명시 적으로 액세스 할 때만 가져옵니다. 관련 데이터가 필요하지 않은 경우 리소스를 절약 할 수 있지만 컬렉션을 반복 할 때 여러 쿼리가 트리거되어 무의식적으로 N+1 문제를 일으 킵니다. 예를 들어, 각 블로그 게시물의 저자에 액세스하면 개별적으로 게시물 당 별도의 쿼리가 트리거됩니다 [5].

** 3. 상황에 맞는 조정없이 쿼리를 맹목적으로 재사용합니다
응용 프로그램의 다른 부분에서 동일한 쿼리를 재사용하지 않고 재사용하면 불필요한 데이터 검색을 유발하고 N+1 문제를 악화시킬 수 있습니다. 특정 사용 사례에 대해 최적화되지 않은 쿼리는 불완전한 데이터를 가져올 수있어 나중에 관련 정보를 가져 오기 위해 추가 쿼리를 유발할 수 있습니다 [8].

** 4. 열망하는로드 또는 쿼리 최적화 기술을 사용하지 않습니다
열성적인로드 (초기 쿼리에서 관련 데이터를 가져 오기) 또는 최적화 된 조인을 사용하지 않으면 데이터베이스에 여러 왕복이 발생합니다. 이것은 개발자가 ORM 또는 쿼리 빌더에게 관련 엔티티를 함께로드하도록 명시 적으로 지시하지 않을 때 발생하여 단일의 효율적인 쿼리 대신 많은 작은 쿼리를 초래합니다 [5] [6] [7].

** 5. 다중 라운드가 데이터베이스에 미치는 영향을 무시합니다
개발자는 때때로 많은 작은 쿼리가 하나의 복잡한 쿼리보다 빠르다고 가정하지만 각 쿼리에는 네트워크 대기 시간 및 처리 오버 헤드가 포함됩니다. N+1 쿼리의 누적 효과는 응용 프로그램 응답 시간을 크게 느리게하고 데이터 볼륨이 증가함에 따라 데이터베이스 부하가 증가합니다 [1] [3] [5].

** 6. 인식 부족 또는 문제의 탐지
N+1 패턴의 각 개별 쿼리가 빠르게 실행되므로 느린 쿼리 로그 나 모니터링 도구로 표시되지 않으므로 조용한 성능 킬러가됩니다. 개발자는 응용 프로그램의 응답 성이 크게 열화 될 때까지 문제를 알아 차리지 않을 수 있습니다 [2] [5] [7].

요약하면, N+1 쿼리 문제는 주로 비효율적 인 데이터 페치 패턴으로 인해 발생합니다. 특히 쿼리를 배치하거나 결합하기보다는 각 레코드에 대한 별도의 쿼리로 관련 데이터를 쿼리합니다. 이것은 종종 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.linkedin.com/posts/aftab-ahmed-bb002827_avoiding-the-n1-query-problem-a-common-activitivity-7270527662970818561-zmz6
[7] https://dev.to/lovestaco/the-n1-query-problem-the-performance-killer-2b1c
[8] https://www.okoone.com/spark/technology-innovation/avoid-these-7-sql-mistakes-for-better-database-management/