Top SQL
Top SQL 화면에서 조회 기간 동안의 Top SQL 목록을 제공합니다. 에이전트가 수집한 Active Session 내의 SQL을 기반으로 실행 횟수, 수행 시간, 대기 시간 등의 지표를 와탭이 자체 산출한 SQL 통계입니다.
-
최소 1분 ~ 최대 30일 범위로 조회할 수 있어 장기 분석에 적합합니다.
-
추이 차트를 통해 특정 시간대의 SQL 발생 패턴을 시각적으로 파악할 수 있습니다.
-
리터럴 값을 제외한 SQL을 기준으로 통계를 산출합니다.
SQL 통계(DB)와 차이점
| 구분 | Top SQL | SQL 통계(DB) |
|---|---|---|
| 데이터 소스 | 에이전트가 수집한 Active Session | DB의 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_interval | int | 5 | SQL 통계 데이터를 생성하고 전송하는 주기(분)로 1 또는 5로 설정할 수 있음 |
Top SQL 분석하기
Top SQL 화면은 분석 기준 탭과 정렬 순서를 선택하여 SQL 성능을 다양한 관점에서 분석할 수 있도록 구성되어 있습니다. 사용자는 애플리케이션 관점의 그룹 분석부터 개별 SQL 성능 분석까지 drill-down/drill-up 방식으로 단계적으로 탐색할 수 있습니다.
Top SQL 분석은 다음 순서로 진행합니다.
-
분석 기준 탭에서 분석 기준을 선택하세요.
- 분석 기준 유형: ALL, DB, APPLICATION, USER, HOST
-
정렬 순서에서 Top 선정 지표를 선택하세요.
- Top 선정 지표 유형: Elapsed Time, Wait Elapsed Time 등
-
차트에서 부하가 높은 그룹을 식별하세요.
-
특정 그룹을 선택하고, SQL List에서 개별 Top SQL을 확인하세요.
-
추가 분석이 필요하면 SQL 상세 분석 화면으로 이동해 분석하세요.
기본 옵션
상단 필 터 영역에서 시간, 대상 인스턴스, 필터 등을 설정할 수 있습니다.
-
시간: 조회 시간 범위 선택(1분 ~ 30일)
-
인스턴스: 조회 대상 DB 인스턴스 선택
-
필터: 필드별 조건 검색(기본:
SQL Text에서 'WhaTap' 제외) -
정렬 순서: Top SQL을 선정할 기준 지표(Elapsed Time, Wait Elapsed Time, Avg Elapsed Time, Max Elapsed Time, Execute Count) 선택, 선택한 지표를 기준으로 내림차순 정렬
-
조회 건수: 테이블에 표시할 건수 설정
-
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 | 문자 | 클라이언트 호스트 명 |
분석 기준 탭
분석 기준 탭에서는 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 실행 지표가 집계되어 차트에 표시됩니다.
| 탭 | 설명 |
|---|---|
| DB | 데이터베이스 단위로 SQL 실행 부하를 분석합니다. |
| APPLICATION | 애플리케이션 이름 기준으로 SQL 부하를 분석합니다. |
| USER | 사용자 계정 기준으로 SQL 부하를 분석합니다. |
| HOST | 클라이언트 호스트 기준으로 SQL 부하를 분석합니다. |
차트에서 특정 그룹을 선택하면 하단에 해당 그룹에 속한 SQL 목록(SQL List)이 표시됩니다. 이를 통해 그룹 → SQL 단계로 drill-down하여 개별 Top SQL까지 상세 분석할 수 있습니다.
추이 차트
선택한 지표 탭 기준으로 Top N개 SQL의 추이를 시계열 차트로 표시합니다. 어떤 SQL이 해당 지표값이 높은지, 어떤 시간대에 높은지 한눈에 확인할 수 있습니다. 차트 하단의 범례에서 각 SQL을 확인할 수 있으며, 범례 또는 차트를 클릭하면 해당 SQL 라인이 하이라이트됩니다.
조회 시간 범위에 따라 차트의 데이터 간격이 자동 조정됩니다.
| 조회 범위 | 차트 인터벌 |
|---|---|
| 3시간 이하 | 1분 또는 5분 (sqlstat_send_interval 값에 따라 결정) |
| 1일 이하 | 5분 |
| 30일 이하 | 1시간 |
쿼리별 차트
테이블 항목의 ► 버튼을 클릭하면 해당 개별 쿼리의 실행 횟수와 평균 수행 시간 차트를 확인할 수 있습니다. 차트 인터벌은 위 기준과 동일합니다.
-
마우스를 오버하면 시간별 수치를 확인할 수 있습니다.
-
차트의 막대 그래프를 클릭하면 해당 시간의 인스턴스 모니터링 화면이 새 창으로 열립니다. 해당 SQL이 수행된 시간대의 인스턴스 전반과 액티브 세션을 한번에 확인할 수 있습니다.
데이터 해석 가이드
주요 지표
| 컬럼 | 의미 | 해석 포인트 |
|---|---|---|
sql | SQL 문(리터럴 값 제외) | 어떤 쿼리인지 확인 |
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 max와elapse avg차이가 큰 SQL평소에 빠르지만 특정 조건에서 급격히 느려짐 → 락 경합, 데이터 편향 등 확인
실전 활용 시나리오
시나리오 1. 전체 부하가 큰 SQL 찾기
-
elapse sum (sec)기준으로 내림차순 정렬 -
상위 SQL이 전체 DB 부하에 가장 큰 영향을 주는 쿼리
-
execute count와elapse avg를 함께 확인하여 판단-
elapse avg가 높으면: 개별 쿼리 자체가 느림 → SQL 튜닝, 인덱스 점검
-
elapse avg는 낮지만 execute count가 높으면: 너무 자주 호출됨 → 캐싱, 호출 로직 개선
-
시나리오 2. 대기 시간이 긴 SQL 찾기
-
wait elapse sum (sec)기준으로 내림차순 정렬 -
대기 시간이 긴 SQL 식별
-
락 경합, I/O 병목, 커넥션 대기 등 원인 분석