25

Neo4j 성능 튜닝: 100만 노드 KG를 빠르게 다루기

Neo4j & Cypher

학습 목표

EXPLAIN/PROFILE로 쿼리 실행 계획을 분석한다 느린 쿼리를 인덱스/패턴 재작성으로 최적화한다 대용량 데이터 로딩 베스트 프랙티스를 안다

"우리 KG 쿼리가 30초 걸려요"

제조 현장에서 가장 흔한 KG 도입 실패 원인 1위: 성능. 100만 노드까지는 거의 모든 패턴이 빠르다. 그 이상부터 차이가 벌어진다.


EXPLAIN vs PROFILE

에디터 로딩 중...

흔한 성능 문제 3가지

문제 1: 인덱스 미사용 (전체 스캔)

에디터 로딩 중...

문제 2: Cartesian Product

에디터 로딩 중...

문제 3: 깊은 가변 길이 탐색

에디터 로딩 중...

대용량 데이터 로딩 전략

에디터 로딩 중...

메모리 설정

에디터 로딩 중...

쿼리 패턴 최적화 체크리스트

  • 시작점 노드에 인덱스가 있는가?
  • 가변 길이 경로(*)에 깊이 제한이 있는가?
  • WHERE 절이 MATCH 패턴 내부에서 가능한가? (필터 푸시다운)
  • 불필요한 RETURN 컬럼은 없는가?
  • LIMIT가 결과 분량을 적절히 제한하는가?
  • EXISTS {} 서브쿼리로 불필요한 조인을 제거했는가?

제조 KG의 현실적 규모

에디터 로딩 중...

우리 프로젝트는 첫 번째 범주. 성능 걱정보다 모델링 품질에 집중하자.

핵심 포인트
  • PROFILE로 실행 계획 확인, NodeIndexSeek가 보이도록 인덱스 설계
  • Cartesian Product는 명확한 연결로 회피
  • 대용량 로딩은 인덱스 먼저 + 배치 트랜잭션 + APOC 활용
  • Page Cache 메모리 ≥ 데이터 크기의 80%가 황금 비율