콘텐츠로 이동

쿼리 분석


쿼리 분석은 데이터베이스 모듈의 독립적인 분석 진입점으로, 인스턴스 간 쿼리 집계 표시를 지원합니다. 여러 데이터베이스 인스턴스를 관리할 때 일일이 인스턴스 상세 페이지에 들어가지 않아도 전역 관점에서 시스템 수준의 느린 쿼리 병목을 파악할 수 있습니다.

지원 데이터베이스 유형

쿼리 분석은 현재 MySQL, PostgreSQL, Oracle, SQL Server, MongoDB를 지원합니다. 데이터베이스 유형을 전환하면 목록이 해당 유형에 맞게 다시 로드되어 해당 인스턴스의 쿼리 데이터를 표시합니다.


기능 개요

탐색기가 단일 인스턴스 차원으로 쿼리 분석을 수행하는 것과 달리, 쿼리 분석의 핵심 기능은 다음과 같습니다.

  • 인스턴스 간 집계: 동일한 비즈니스 SQL이 여러 인스턴스에서 실행되면 자동으로 전역 누적 데이터로 집계되어 인스턴스별로 일일이 조사할 필요가 없습니다.
  • 동일 유형 쿼리 병합: 시스템이 매개변수 값이 다른 동일 유형 SQL(예: WHERE id = 1 및 WHERE id = 2)을 자동으로 인식하여 동일한 쿼리 템플릿으로 병합해 통계를 내므로, 동일한 문장이 매개변수 차이로 인해 분산 표시되지 않습니다.
  • 전역 성능 정렬: 총 소요 시간, 실행 횟수, 평균 소요 시간 등 여러 차원으로 정렬할 수 있어 전역 성능 병목을 빠르게 발견할 수 있습니다.

페이지 레이아웃

쿼리 분석 페이지는 상단 작업 표시줄, 왼쪽 빠른 필터, 쿼리 목록 및 상세 사이드 패널로 구성됩니다.

상단 작업 표시줄

요소 설명
데이터베이스 유형 선택기 드롭다운으로 MySQL / PostgreSQL / Oracle / SQL Server / MongoDB를 전환하며, 전환 후 목록은 해당 유형에 맞게 다시 로드됩니다
SQL 템플릿 검색 키워드로 SQL 템플릿을 검색할 수 있으며, 입력은 512바이트로 제한됩니다
전체 쿼리 수 현재 필터 조건에서의 쿼리 템플릿 수를 표시합니다
내보내기 현재 목록 페이지를 CSV 파일, TXT로 내보내거나 대시보드로 내보냅니다
표시 항목 목록 열의 표시/숨기기를 사용자 정의할 수 있습니다

왼쪽 빠른 필터

필터 차원 설명
인스턴스 이름 다중 선택, 해당 데이터베이스 유형의 모든 인스턴스를 표시합니다
데이터베이스 주소 다중 선택, 데이터베이스 연결 주소 기준으로 필터링합니다
총 소요 시간 구간 범위 필터링
실행 횟수 구간 범위 필터링
시간 범위 연동

쿼리 분석의 시간 범위는 전역 시간 위젯과 연동됩니다. 목록 데이터와 상세 사이드 패널의 추세 그래프는 모두 선택한 시간 창을 기준으로 실시간 집계됩니다.


쿼리 목록

목록에는 현재 시간 범위와 현재 데이터베이스 유형에서 집계된 모든 쿼리 템플릿이 표시됩니다. 각 레코드는 하나의 SQL 유형(매개변수가 ?로 대체됨)을 나타내며, 해당 SQL 유형이 선택된 모든 인스턴스에서 실행된 데이터를 집계합니다.

목록 필드

필드 설명
SQL 템플릿 매개변수가 ?로 대체된 SQL 텍스트로, 목록에 최대 2줄 표시됩니다. 클릭하면 오른쪽 상세 사이드 패널이 열립니다
실행 횟수 시간 범위 내에서 해당 쿼리 유형이 모든 인스턴스에서 실행된 누적 횟수
평균 소요 시간 해당 쿼리 유형의 평균 단일 실행 시간
총 소요 시간 시간 범위 내에서 해당 쿼리 유형이 모든 인스턴스에서 실행된 누적 실행 시간
성능 오버헤드 비율 해당 쿼리 유형의 누적 총 소요 시간이 전체 쿼리의 누적 총 소요 시간에서 차지하는 비율(%)로, 진행률 표시줄로 시각화됩니다. 비율이 높을수록 해당 쿼리 유형이 시스템 전체 성능에 미치는 영향이 큽니다
평균 스캔 행 수 해당 쿼리 유형이 모든 인스턴스에서 평균적으로 스캔/반환한 행 수로, 쿼리의 데이터 스캔 범위를 평가하는 데 사용됩니다
추세 현재 시간 범위 내 실행 횟수의 미니 꺾은선 그래프(Sparkline)로, 목록 페이지 시간 범위와 연동됩니다
SQL 템플릿과 원본 SQL

목록에 표시되는 SQL 템플릿은 구체적인 매개변수 값을 ?로 대체하여 문장 구조 자체에 집중할 수 있도록 한 것입니다. 상세 사이드 패널에서는 해당 템플릿 아래 최근에 나타난 원본 SQL 샘플 하나를 확인할 수 있으며, 전체 텍스트를 원클릭으로 복사할 수 있습니다.


쿼리 상세 사이드 패널

목록에서 아무 행이나 클릭하면 오른쪽에 쿼리 상세 사이드 패널이 열리며 해당 쿼리 유형의 전역 성능 데이터가 표시됩니다. 사이드 패널에는 다음 탭이 포함됩니다.

전체 SQL

사이드 패널 상단에 해당 쿼리 유형의 전체 SQL 템플릿(매개변수가 ?로 대체됨)이 고정 표시되며, 원클릭 복사를 지원합니다.

성능 추세

목록 페이지 시간 범위와 연동하여 시계열 차트로 해당 쿼리 유형의 세 가지 핵심 지표를 표시합니다.

차트 설명
실행 횟수 회/분, 해당 쿼리 유형의 동시성 부하 추세를 반영합니다
평균 소요 시간 밀리초(ms), 해당 쿼리 유형의 단일 실행 효율 추세를 반영합니다
총 소요 시간 밀리초(ms), 해당 쿼리 유형이 전체 시스템에서 차지하는 시간 소비 추세를 반영합니다

각 지표는 독립적인 시계열 차트로 표시되며, 시간 간격을 선택해 필터링하거나 차트를 내보낼 수 있습니다.

인스턴스

해당 쿼리 유형이 각 인스턴스에서 실행된 분포를 표시하여 병목이 어떤 인스턴스에 집중되어 있는지 판단하는 데 도움을 줍니다.

필드 설명
데이터베이스 주소 인스턴스의 연결 주소
인스턴스 이름 데이터베이스 인스턴스 식별자
실행 횟수 해당 인스턴스에서 해당 쿼리 유형의 실행 횟수로, 진행률 표시줄로 시각화됩니다
평균 소요 시간 해당 인스턴스에서 해당 쿼리 유형의 평균 실행 시간
총 소요 시간 해당 인스턴스에서 해당 쿼리 유형의 누적 실행 시간으로, 진행률 표시줄로 시각화됩니다
평균 전송 행 수 해당 인스턴스에서 해당 쿼리 유형이 평균적으로 반환한 행 수
오류 횟수 해당 인스턴스에서 해당 쿼리 유형의 실행 실패 횟수
  • 인스턴스 이름을 클릭하면 새 페이지에서 해당 인스턴스의 단일 인스턴스 쿼리 상세 페이지가 열립니다(기존 탐색기 상세 페이지 재사용).
  • 검색 상자에서 인스턴스 이름 또는 데이터베이스 주소로 필터링할 수 있습니다.

사용자

해당 쿼리 유형이 각 데이터베이스 계정에서 실행된 분포를 표시합니다.

필드 설명
사용자 데이터베이스 계정 이름
샘플 수 해당 사용자가 해당 쿼리 유형을 실행한 횟수
평균 소요 시간 해당 사용자가 해당 쿼리 유형을 실행한 평균 시간
  • 검색 상자에서 사용자 이름으로 필터링할 수 있습니다.

쿼리 샘플

해당 쿼리 유형의 실제 샘플링 기록을 표시하며, 필드는 데이터베이스 유형에 따라 다릅니다.

MySQL 예시 필드:

필드 설명
시간 샘플링이 발생한 타임스탬프
데이터베이스 대상 데이터베이스(Schema)
실행 시간 해당 샘플의 실제 실행 소요 시간
사용자 해당 샘플을 실행한 데이터베이스 계정
대기 그룹 해당 샘플의 대기 이벤트 그룹
데이터베이스별 샘플 필드 차이

쿼리 샘플의 표시 필드는 데이터베이스 유형에 따라 다릅니다. 예를 들어 SQL Server는 "세션 ID, 대기 유형, CPU 소요 시간" 등의 필드를 표시하며, Oracle과 PostgreSQL도 각각의 네이티브 성능 필드를 표시합니다. 구체적인 필드는 페이지에 실제 표시되는 내용을 기준으로 합니다.

실행 계획

쿼리 목록에서 SQL 템플릿을 클릭하면 상세 사이드 패널이 열리고 실행 계획이 표시됩니다. 실행 계획은 데이터베이스 최적화 프로그램이 현재 쿼리를 위해 선택한 실행 방식을 설명하며, 쿼리에 전체 테이블 스캔, 부적절한 인덱스 사용 또는 높은 Join 비용 등의 문제가 있는지 판단하는 데 사용할 수 있습니다.

지원 데이터베이스 유형

실행 계획은 현재 MySQL, PostgreSQL, Oracle 및 SQL Server를 지원하며, MongoDB는 아직 지원하지 않습니다. 현재 환경에서 실행 계획 수집이 활성화되어 있고 시스템이 해당 계획 데이터를 수집한 경우에만 페이지에 실행 계획이 표시됩니다.

실행 계획 선택

동일한 쿼리도 데이터베이스 인스턴스에 따라 다른 실행 계획을 사용할 수 있으며, 동일한 인스턴스에 여러 계획이 존재할 수도 있습니다. 페이지 상단의 선택기에서 전환하여 확인할 수 있으며, 옵션은 인스턴스 이름과 계획 식별자로 구성됩니다(예: prod-sql-01 · 0x72AE91F3).

SQL Server를 예로 들면 계획 식별자는 Plan Hash로 표시됩니다. 동일한 쿼리의 Plan Hash가 변경되면 일반적으로 데이터베이스가 다른 실행 방식을 사용했음을 의미합니다.

계획을 선택하면 페이지에 해당 계획이 속한 데이터베이스 인스턴스, 데이터베이스 이름 및 계획 식별자가 표시됩니다.

사용 제안

먼저 성능 추세와 인스턴스를 통해 소요 시간 이상을 파악한 다음, 실행 계획으로 들어가 노드 종속 관계와 고비용 작업을 확인하는 것이 좋습니다. 토폴로지 다이어그램은 전체 실행 경로를 파악하는 데 적합하고, 노드 목록은 노드 데이터 비교에 적합하며, XML / JSON은 데이터베이스가 반환한 전체 원본 정보를 확인하는 데 적합합니다.

토폴로지 다이어그램

토폴로지 다이어그램은 실행 계획의 노드 계층에 따라 데이터베이스 실행 단계를 표시합니다. 노드 사이의 연결선은 노드 간 종속 관계를 나타내며, 쿼리의 실제 실행 타임라인이 아닙니다.

각 노드는 데이터베이스가 반환한 데이터를 기반으로 다음 정보를 표시합니다.

  • 실행 작업 이름
  • 논리 작업(원본 계획에 해당 필드가 포함되어 있고 실행 작업과 다른 경우에만 표시)
  • 액세스한 테이블 또는 인덱스
  • Rows: 데이터베이스 최적화 프로그램이 예상하는 노드 출력 행 수
  • Cost: 현재 노드와 하위 노드의 상대적 비용

토폴로지 다이어그램을 확대, 축소, 드래그하거나 전체 화면으로 표시할 수 있습니다. 노드에 마우스를 올리면 실행 작업, 논리 작업, 액세스 대상, 예상 읽기 행 수, 필터 조건, Join 조건 또는 데이터베이스 네이티브 경고 등의 정보를 추가로 확인할 수 있습니다. 페이지에는 원본 계획에 실제로 존재하는 필드만 표시됩니다.

Rows 및 Cost 이해하기

Estimated Rows는 데이터베이스 최적화 프로그램이 예상하는 노드 출력 행 수이며, 실제 처리 행 수가 아닙니다. Node Cost는 동일한 실행 계획 내 각 노드의 상대적 비용을 비교하는 데 사용되며, 실제 실행 소요 시간을 나타내지 않고 서로 다른 데이터베이스 간 직접 비교에도 적합하지 않습니다.

노드 목록

노드 목록은 실행 계획의 노드 계층을 들여쓰기 방식으로 표시하며, 각 노드가 액세스하는 대상, 예상 행 수 및 노드 비용을 빠르게 비교하는 데 적합합니다. 목록 순서는 노드 간 계층 관계를 표현하기 위한 것이며, 실제 실행 시간 순서를 나타내지 않습니다.

필드 설명
실행 단계 데이터베이스가 반환한 실행 작업 이름 및 노드 계층
액세스 대상/인덱스 현재 노드가 액세스하는 테이블, 뷰 또는 인덱스
Estimated Rows 데이터베이스 최적화 프로그램이 예상하는 노드 출력 행 수. 원본 계획에 읽기 행 수가 함께 포함된 경우 출력과 읽기 데이터를 각각 표시합니다
Node Cost 현재 노드와 하위 노드의 상대적 비용

XML / JSON

원본 보기는 수집기가 확보한 전체 실행 계획을 표시하며, 서식 지정, 검색, 복사 및 다운로드를 지원합니다.

데이터베이스 원본 형식 다운로드 형식
SQL Server XML ShowPlan XML 형식에 해당하면 .sqlplan으로 다운로드되고, 그 외 XML은 .xml로 다운로드됩니다
MySQL JSON .json
PostgreSQL JSON .json
Oracle JSON .json
실행 계획 데이터 설명

실행 계획은 수집기가 이미 확보한 데이터에서 가져온 것이며, 시스템은 계획을 확인하기 위해 사용자 SQL을 다시 실행하거나 EXPLAIN 또는 EXPLAIN ANALYZE를 임의로 실행하지 않습니다. 실행 계획이 반드시 페이지에서 현재 선택한 시간 범위에 생성된 것은 아니며 특정 실행과 일치하지 않을 수도 있습니다. 실제 행 수와 실제 소요 시간이 포함되는지 여부는 데이터베이스가 반환한 원본 계획을 기준으로 합니다.


지표 계산 설명

쿼리 분석의 집계 지표는 다음 로직으로 계산됩니다.

지표 계산 설명
실행 횟수 모든 인스턴스에서 해당 쿼리 유형의 실행 횟수 합산
평균 소요 시간 모든 인스턴스 누적 총 소요 시간 ÷ 모든 인스턴스 누적 실행 횟수
총 소요 시간 모든 인스턴스에서 해당 쿼리 유형의 소요 시간 합산
성능 오버헤드 비율 해당 쿼리 유형 누적 총 소요 시간 ÷ 전체 쿼리 누적 총 소요 시간 × 100%
평균 스캔 행 수 모든 인스턴스에서 해당 쿼리 유형의 평균 스캔 행 수의 평균값
데이터 시점 안내

쿼리 분석 데이터는 사용자가 선택한 시간 범위에 따라 실시간으로 집계됩니다. 선택한 시간 범위 내에 데이터를 보고하지 않은 인스턴스는 집계 결과에 나타나지 않습니다.


문서 평가

이 페이지가 도움이 되었나요?