5장. 쿼리 분석 및 튜닝
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
프로덕션 환경의 모든 그래프 애플리케이션은 성능 좋은 쿼리와 효과적인 리소스 사용에 의존합니다. 이는 효율적인 쿼리와 느린 쿼리의 차이가 때로는 재정적 손실, 보안 침해, 심지어 인명 손실과 같은 심각한 결과를 초래할 수 있는 미션 크리티컬 애플리케이션에서 더욱 중요합니다. 이 장에서는 준비된 솔루션만 제공하는 대신 쿼리가 효율적으로 수행되는 이유 (또는 그렇지 않은 이유)에 초점을 맞춥니다. 이 장의 목표는 쿼리를 조정해야 할 때 자신의 쿼리에 대해 추론할 수 있을 만큼 충분히 깊이 있는 이해를 제공하는 것입니다.
Neo4j 컨설턴트로서 우리는 모든 종류의 도메인에서 무수히 많은 Cypher 쿼리를 접해왔으며, 좋은 소식은 이러한 쿼리의 대부분은 기본 사항을 잘 이해하고 있다면 성능을 개선하도록 조정할 수 있다는 것입니다. 이 장에서는 쿼리 플래너가 작동하는 방식과 생성된 실행 계획을 읽고 이해하는 방법에 대해 알아봅니다. 좋은 쿼리를 작성하는 데 핵심이 되는 앵커 선택성 및 행 카디널리티와 같은 개념과 성능을 위한 인덱스 사용에 대해 살펴봅니다.
쿼리 실행
Cypher 쿼리는 그래프에서 일치시키려는 패턴, 적용할 조건, 결과에 적용할 변환을 설명하는 문자열로 시작됩니다. 그림 5-1은 Cypher 쿼리 문자열이 실행되어 결과를 생성하기까지 관련된 단계를 개략적으로 보여줍니다.
그림 5-1. Cypher의 쿼리 처리 파이프라인
쿼리는 먼저 추상 구문 트리(AST)로 파싱됩니다. 그런 다음 의미 분석을 포함한 일련의 정규화 단계를 거칩니다. 쿼리 최적화 도구 또는 쿼리 플래너는 데이터베이스 통계와 인덱스 및 제약 조건의 현재 상태를 사용하여 필수 논리 계획을 생성합니다. 이 계획은 일반적으로 현재 데이터베이스 상태에 대해 쿼리를 실행하는 가장 효율적인 방법을 나타냅니다. 여기에는 쿼리를 실행하는 단계가 포함되어 있으며 연산자의 이진 트리로 구성됩니다.
그런 다음 Cypher 런타임이 이 계획을 실제 계획으로 변환하여 데이터베이스에 대해 실행합니다. Cypher 플래너와 런타임은 지속적으로 개선되고 있으며, 최신 버전의 Neo4j는 점점 더 효율적인 쿼리 실행을 가능하게 합니다. 이 책을 집필하는 현재 Cypher에는 슬롯형, 파이프라인형, 병렬형 등 세 가지 런타임이 있습니다. 기본 런타임(현재 Neo4j Enterprise의 파이프라인 런타임)은 일반적으로 전반적인 성능, 특히 많은 수의 쿼리가 병렬로 실행되는 트랜잭션 워크로드에 가장 적합합니다. 각 런타임에는 고유한 특성이 있습니다. 장단점을 이해하게 되면 특정 쿼리에 대한 런타임을 재정의하기로 결정할 수 있습니다. 이 장의 뒷부분에서 런타임에 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access