8

PROFILE 로 증거 기반 튜닝

Cypher 로 답하는 CQ

학습 목표
  • 실행 계획을 읽고 인덱스 작동 여부를 판별한다
  • db hits 로 두 쿼리의 비용을 비교한다
  • 성능 회귀를 GD 문항으로 관리한다

성능 — PROFILE 로 증거 기반 튜닝

코스 2에서 "인덱스는 CQ의 WHERE절"이라고 했습니다. 그 판단이 맞았는지 검증하는 방법이 PROFILE입니다.

PROFILE MATCH (v:Vessel {imoNumber:"9074729"})-[:MAKES_CALL]->(pc) RETURN pc;

읽는 법 요점

  • 실행 계획 첫 연산자가 NodeIndexSeek면 인덱스가 일하는 것
  • NodeByLabelScan(전체 스캔)이면 인덱스 누락입니다
  • db hits 가 비용의 단위입니다 — 같은 결과를 내는 두 쿼리의 db hits를 비교해 싼 쪽을 채택합니다

튜닝 3습관

  1. 앵커(시작점)를 인덱스 필드로 — 어디서 출발하느냐가 전체 비용을 정합니다
  2. 필터는 패턴 안으로 최대한 밀어넣기 — 다 가져와서 거르지 말고, 가져올 때 거릅니다
  3. 집계 전 WITH로 중간 축소 — 큰 집합을 끝까지 끌고 가지 않습니다

느린 쿼리는 감이 아니라 수치로 관리합니다

⚠️ "느린 것 같다"는 말로는 아무것도 고칠 수 없습니다. PROFILE 수치를 근거로, GD에 성능 회귀 문항(응답시간 임계)을 추가해 관리합니다. 앞 코스에서 만든 채점 하네스가 정확도뿐 아니라 성능도 지키게 되는 것입니다.

실습

  1. 자주 쓰는 쿼리 3개에 PROFILE을 걸고 첫 연산자를 확인합니다. LabelScan이 나오면 인덱스를 추가하고 다시 재세요.
  2. 같은 결과를 내는 쿼리를 두 가지 방식으로 써서 db hits를 비교합니다(예: 앵커를 Vessel로 잡을 때 vs PortCall로 잡을 때).
  3. 응답시간 임계를 정해 GD에 성능 문항으로 등록합니다.
에디터 로딩 중...
용어