콘텐츠로 건너뛰기
Telemetry
데이터베이스 신뢰성 SQL 레시피

N+1 데이터베이스 쿼리 패턴 감지

하나의 애플리케이션 요청 내에서 여러 번 반복되는 데이터베이스 지문을 감지합니다.

중급database_request_query_events검토됨 2026-07-28테스트됨 아파치 DataFusion 45.2.0

검토자 Telemetry 제품 팀 . SQL 호환성, 이벤트 계약, 합성 출력 및 운영상의 주의사항. 표준 및 소유권 검토

질문에 답변됨

요청 내에서 어떤 경로와 쿼리 조합이 의심스럽게 반복됩니까?

N+1 동작은 상관 관계 문제입니다. 쿼리는 전체적으로 빠르고 무해할 수 있지만 개별 요청 내에서는 과도하게 반복됩니다. 이 패턴은 영향을 받은 경로를 요약하기 전에 요청당 각 지문을 계산합니다.

이벤트 계약

쿼리가 예상하는 필드

필드유형그것이 존재하는 이유
timestamp_utcTimestamp쿼리 완료 시간(UTC)입니다.
request_idUtf8제한된 요청 상관 식별자입니다.
route_templateUtf8안정적인 적용 경로.
query_fingerprintUtf8매개변수가 없는 정규화된 쿼리 형태입니다.
sequence_in_requestInt64요청 내부의 쿼리 순서입니다.
duration_msFloat64데이터베이스 작업 기간.
environmentUtf8배포 환경.
DataFusion SQL

쿼리 복사

sql
WITH queries_per_request AS (
  SELECT
    route_template,
    query_fingerprint,
    request_id,
    COUNT(*) AS executions_in_request
  FROM database_request_query_events
  WHERE timestamp_utc >= now() - INTERVAL '24 hours'
    AND environment = 'production'
  GROUP BY route_template, query_fingerprint, request_id
)
SELECT
  route_template,
  query_fingerprint,
  COUNT(*) AS requests,
  SUM(CASE WHEN executions_in_request >= 5 THEN 1 ELSE 0 END)
    AS requests_with_repeats,
  AVG(executions_in_request) AS average_executions_per_request,
  MAX(executions_in_request) AS maximum_executions_in_request
FROM queries_per_request
GROUP BY route_template, query_fingerprint
ORDER BY requests_with_repeats DESC, route_template;

이 읽기 전용 쿼리는 빈 유형의 테이블에 대해 계획되고 실행됩니다. 아파치 DataFusion 45.2.0. 결정론적 샘플 출력은 합성되어 별도로 검토됩니다. 자신의 데이터에 대해 필드 유형, 임계값 및 비즈니스 정의를 검증합니다. 테스트 방법론을 읽어보세요.

쿼리 결과

요청 내에서 반복되는 쿼리

결제 경로는 두 요청에서 품목 항목 지문을 5회 이상 반복합니다.

route_templatequery_fingerprintrequestsrequests_with_repeatsaverage_executions_per_requestmaximum_executions_in_request
/api/checkoutSELECT line_items BY order_id3246
/api/profileSELECT user WITH preferences3011

합성 예제 출력. 운영 결정에 사용하기 전에 자체 이벤트 스키마 및 임계값에 대해 쿼리를 실행하세요.

Repeated queries inside requests: Detect N+1 Database Query Patterns 예제 결과의 합성 requests_with_repeats 값에 대한 정적 차트
결정론적 예제 출력의 색인 생성 가능한 SVG입니다. 기사, 런북 또는 저작자가 포함된 디자인 검토를 위해 다운로드하세요.

예제 재현

공공 픽스처 다운로드

JSON 번들은 타입이 지정된 이벤트 계약을 포함합니다. reproducible 입력 행, 정확한 SQL, 예상 출력, 검토 참고 사항 및 엔진 버전. CSV에는 표시된 결과가 포함됩니다.

SQL 작동 방식

  1. 1내부 쿼리는 경로 수준 집계 전에 요청 수준 반복을 설정합니다.
  2. 2제어된 지문은 원시 SQL 값을 유지하지 않고 동등한 매개변수화된 작업을 그룹화합니다.
  3. 3보급률과 최악의 반복 사례가 모두 보존되므로 하나의 극단적인 요청이 체계적으로 보이지 않습니다.

결정해야 할 극단적인 경우

  • 의도적인 일괄 처리 및 페이지 매김 동작에 맞는 임계값을 선택합니다.
  • 비동기 작업에는 요청에서 작업자로의 핸드오프 후에도 유지되는 상관 식별자가 필요합니다.
  • 샘플링 쿼리 이벤트는 정확한 반복 횟수를 숨길 수 있습니다. 추적 인식 샘플링을 사용하거나 추정치를 문서화하십시오.

추천 대시보드

  • 바: 경로 및 지문별 requests_with_repeats
  • 추세: 릴리스별 요청당 평균 실행
  • 추적 링크: 선택한 request_id에 대한 쿼리 시퀀스

알림 안내

하나의 요청에 대해 페이징하는 것보다 반복 쿼리 보급률이 크게 증가할 때 릴리스 회귀 알림을 선호합니다.

알림 설정 읽기

레시피를 활용해 보세요

관련 계측 및 가이드

분석 계속하기

실제 이벤트에서 실행

테이블을 만들고, 필드를 조정하고, 결과를 저장하세요.

무료로 시작하고, 구조화된 이벤트를 보내고, 쿼리 결과를 차트, 공유 대시보드 위젯 또는 알림 입력으로 사용하세요.

API 키 받기