본문으로 건너뛰기

Top SQL

조회 기간 동안의 Top SQL 목록을 제공합니다. 에이전트가 수집한 Active Session 내의 SQL을 기반으로 실행 횟수, 수행 시간, 대기 시간 등의 지표를 와탭이 자체 산출한 SQL 통계입니다.

  • 최소 1분 ~ 최대 30일 범위로 조회할 수 있어 장기 분석에 적합합니다.

  • 추이 차트를 통해 특정 시간대의 SQL 발생 패턴을 시각적으로 파악할 수 있습니다.

  • 리터럴 값을 제외한 SQL을 기준으로 통계를 산출합니다.

SQL 통계(DB)와 차이점

구분Top SQLSQL 통계(DB)
데이터 소스에이전트가 수집한 Active SessionDB의 pg_stat_statements
통계 산출와탭 자체 산출DB가 제공하는 통계를 그대로 수집
별도 DB 설정불필요pg_stat_statements 확장 설치 필요
주요 지표실행 횟수, 수행 시간 (avg/max/sum), 대기 시간실행 횟수, 수행 시간, Row 처리, 블록 I/O 등
조회 범위1분 ~ 30일시간/날짜 단위
추이 차트제공미제공

사전 설정

Top SQL 분석 기능을 사용하려면 Agent 설정이 필요합니다.

Agent 설정

별도 설정 없이 5분 단위 통계가 기본 제공됩니다. 정밀한 1분 단위 분석이 필요한 경우 whatap.conf에 다음 설정을 추가합니다.

sqlstat_send_interval=1
설정 항목타입기본값설명
sqlstat_send_intervalint5SQL 통계 데이터를 생성하고 전송하는 주기(분)으로 1 또는 5로 설정할 수 있습니다.

Top SQL 분석하기

Top SQL 화면은 분석 기준(1차 탭)과 Top 선정 기준(2차 탭)을 선택하여 SQL 성능을 다양한 관점에서 분석할 수 있도록 구성되어 있습니다. 사용자는 애플리케이션 관점의 그룹 분석부터 개별 SQL 성능 분석까지 drill-down/drill-up 방식으로 단계적으로 탐색할 수 있습니다.

Top SQL 분석은 일반적으로 다음과 같은 흐름으로 진행됩니다.

  1. 1차 탭에서 분석 기준을 선택하세요.

    • 제공하는 탭: ALL, DB, APPLICATION, USER, HOST
  2. 2차 탭에서 Top 선정 지표를 선택하세요.

    • 제공하는 탭: Elapsed Time, Wait Elapsed Time 등
  3. 차트에서 부하가 높은 그룹을 확인하세요.

  4. 특정 그룹 선택 후 SQL List에서 개별 Top SQL 확인하세요.

  5. 필요 시 SQL 상세 분석으로 drill-down 하세요.

기본 옵션

상단 필터 영역에서 조회 기간, 대상 인스턴스, SQL 필터 조건 등을 설정할 수 있습니다.

  • 시간: 조회 시간 범위 선택 (1분 ~ 30일)

  • 인스턴스: 조회 대상 DB 인스턴스 선택

  • 필터: 필드별 조건 검색 (기본: SQL Text에서 'WhaTap' 제외)

  • 조회 건수: 테이블에 표시할 건수 설정

  • Top N: 추이 차트에 표시할 상위 항목 수 설정

  • 컬럼 아이콘 (컬럼 선택): 표시할 컬럼을 추가/삭제하고, 드래그로 순서를 변경할 수 있음

  • 다운로드 아이콘 (다운로드): CSV 형식으로 내보내기

필드 패널

화면 왼쪽의 필드 패널에서 필터 조건을 쉽게 추가할 수 있습니다. 필드명을 클릭해서 조건을 넣으면 해당 조건이 필터에 추가됩니다.

필드타입설명
SQL Text문자SQL 문
Elapsed Time숫자수행 시간 합계(초)
Wait Elapsed Time숫자대기 시간 합계(초)
Avg Elapsed Time숫자평균 수행 시간(초)
Max Elapsed Time숫자최대 수행 시간(초)
Execute Count숫자실행 횟수
WSQL Hash문자SQL 해시값
User문자실행 사용자
Datname문자데이터베이스 명
Application Name문자애플리케이션 이름
Client Hostname문자클라이언트 호스트 명

SQL 상세 보기

SQL 컬럼을 클릭하면 상세 정보 창이 열립니다.

필터 사용하기

  1. 필터 추가 버튼을 클릭하세요.

  2. 필터 키를 선택하세요.

    • 문자(String): = (포함), != (미포함)

    • 숫자(Number): == (같음), >= (크거나 같음), <= (작거나 같음)

  3. 값 입력 후 적용하세요.

    • 다중 조건은 AND 로직을 적용하세요.

분석 기준 - 1차 탭

1차 탭에서 Top SQL을 어떤 기준으로 분석할지 선택합니다. 분석 기준은 ALL, DB, APPLICATION, USER, HOST을 제공하며, 선택한 기준에 따라 SQL 실행 정보를 그룹 단위 또는 SQL 단위로 분석할 수 있습니다.

ALL

ALL을 선택하면 SQL 단위의 Top SQL을 바로 확인할 수 있습니다. 차트 또한 SQL 단위 기준으로 표시되며, 시스템 전체에서 성능 영향도가 높은 SQL을 직접 확인할 때 사용합니다.

DB/APPLICATION/USER/HOST

DB / APPLICATION / USER / HOST는 애플리케이션 관점에서 자주 사용하는 분석 기준입니다. 이 탭을 선택하면 해당 기준으로 SQL 실행 지표가 집계되어 차트에 표시됩니다. 차트에서 특정 그룹을 선택하면 하단에 해당 그룹에 속한 SQL 목록(SQL List)이 표시됩니다. 이를 통해 그룹 → SQL 단계로 drill-down하여 개별 Top SQL까지 상세 분석할 수 있습니다.

설명
DB데이터베이스 단위로 SQL 실행 부하를 분석합니다.
APPLICATION애플리케이션 이름 기준으로 SQL 부하를 분석합니다.
USER사용자 계정 기준으로 SQL 부하를 분석합니다.
HOST클라이언트 호스트 기준으로 SQL 부하를 분석합니다.

Top 선정 기준 - 2차 탭

2차 탭에서 Top SQL을 선정할 기준 지표를 선택합니다. 선택한 지표를 기준으로 SQL을 내림차순 정렬하여, 설정된 조회 건수만큼 상위 SQL을 표시합니다. 이를 통해 시스템에 가장 큰 부하를 유발하는 SQL을 빠르게 식별할 수 있습니다.

설명
Elapsed Time수행 시간 합계 기준
Wait Elapsed Time대기 시간 합계 기준
Avg Elapsed Time평균 수행 시간 기준
Max Elapsed Time최대 수행 시간 기준
Execute Count실행 횟수 기준

추이 차트(Top SQL Trends)는 선택한 지표 탭 기준으로 Top N개 SQL의 추이를 시계열 차트로 표시합니다. 어떤 SQL이 해당 지표값이 높은지, 어떤 시간대에 높은지 한눈에 확인할 수 있습니다.

  • 차트 하단의 범례에서 각 SQL을 확인할 수 있으며, 범례 또는 차트를 클릭하면 해당 SQL 라인이 하이라이트됩니다.

  • 조회 시간 범위에 따라 차트의 데이터 간격이 자동 조정됩니다.

조회 범위차트 인터벌
3시간 이하1분 또는 5분 (sqlstat_send_interval 값에 따라 결정)
1일 이하5분
30일 이하1시간

테이블 항목의 버튼을 클릭하면 해당 개별 쿼리의 실행 횟수평균 수행 시간 차트를 확인할 수 있습니다. 차트 인터벌은 위 기준과 동일합니다.

  • 마우스를 오버하면 시간별 수치를 확인할 수 있습니다.

  • 차트의 막대 그래프를 클릭하면 해당 시간의 인스턴스 모니터링 화면이 새 창으로 열립니다. 해당 SQL이 수행된 시간대의 인스턴스 전반과 액티브 세션을 한번에 확인할 수 있습니다.

데이터 해석 가이드

주요 지표

컬럼의미해석 포인트
sqlSQL 문 (리터럴 값 제외)어떤 쿼리인지 확인
instance실행된 인스턴스 이름어떤 DB에서 실행되었는지 확인
execute count실행 횟수높을수록 자주 호출되는 SQL → 최적화 효과가 큼
elapse sum (sec)총 누적 수행 시간(초)높을수록 전체 부하가 큰 SQL
wait elapse sum (sec)총 누적 대기 시간(초)높을수록 대기가 긴 SQL → 락, I/O 등 병목 확인
elapse avg (sec)평균 수행 시간(초) = elapse sum / execute count높을수록 개별 실행이 느린 SQL → 튜닝 우선 대상
elapse max (sec)최대 수행 시간(초)간헐적 성능 저하 감지 → 최악의 케이스 파악

튜닝 대상 SQL 식별

  • elapse sum이 높고 execute count도 높은 SQL

    자주 실행되면서 전체 부하가 큼 → 최우선 튜닝 대상

  • elapse avg가 높은 SQL

    개별 쿼리 자체가 느림 → SQL 튜닝, 인덱스 점검

  • elapse avg는 낮지만 execute count가 높은 SQL

    개별은 빠르지만 너무 자주 호출됨 → 캐싱, 호출 로직 개선

  • wait elapse sum이 높은 SQL

    대기 시간이 길어 전체 수행 시간이 느림 → 락 경합, I/O 병목 등 확인

  • elapse maxelapse avg 차이가 큰 SQL

    평소에 빠르지만 특정 조건에서 급격히 느려짐 → 락 경합, 데이터 편향 등 확인

실전 활용 시나리오

시나리오 1. 전체 부하가 큰 SQL 찾기

  1. elapse sum (sec) 기준으로 내림차순 정렬

  2. 상위 SQL이 전체 DB 부하에 가장 큰 영향을 주는 쿼리

  3. execute countelapse avg를 함께 확인하여 판단

    • elapse avg가 높으면: 개별 쿼리 자체가 느림 → SQL 튜닝, 인덱스 점검

    • elapse avg는 낮지만 execute count가 높으면: 너무 자주 호출됨 → 캐싱, 호출 로직 개선

시나리오 2. 대기 시간이 긴 SQL 찾기

  1. wait elapse sum (sec) 기준으로 내림차순 정렬

  2. 대기 시간이 긴 SQL 식별

  3. 락 경합, I/O 병목, 커넥션 대기 등 원인 분석

시나리오 3. 느린 SQL 찾기

  1. elapse avg (sec) 기준으로 내림차순 정렬

  2. 개별 실행이 느린 SQL 식별

  3. 해당 SQL의 Plan(실행 계획)을 확인하여 튜닝 포인트 결정

시나리오 4. 간헐적 성능 저하 감지

  1. elapse max (sec)elapse avg (sec)의 차이가 큰 SQL 확인 → 평소에는 빠르지만 특정 조건에서 급격히 느려지는 SQL

  2. ► 버튼으로 쿼리별 추이 차트를 열어 느려진 시간대 확인

  3. 해당 시간대의 막대 그래프를 클릭하여 인스턴스 모니터링에서 원인 분석

시나리오 5. 특정 시간대 이상 분석

  1. 추이 차트에서 비정상적으로 높은 구간 확인

  2. 해당 시간대를 클릭하여 인스턴스 모니터링 지표 확인

  3. 어떤 SQL이 해당 시간대에 집중적으로 실행되었는지 분석