슬로우 쿼리
슬로우 쿼리 화면에서 DB 파라미터에 설정된 기준 시간을 초과한 느린 SQL을 모니터링하고 확인할 수 있습니다. MySQL은 슬로우 쿼리를 로그 파일 또는 테이블에 기록하지만, 이를 확인하려면 DB 서버에 터미널로 접속하여 텍스트 로그를 직접 읽거나 mysql.slow_log 테이블을 조회해야 합니다. 이 화면에서는 슬로우 쿼리 로그를 실시간으로 수집하여 시각적인 차트와 목록으로 제공합니다.
-
Slow Query 차트에서 느린 쿼리의 발생 시점과 수행 시간을 시각적으로 파악할 수 있습니다.
-
Slow Query List에서 개별 쿼리의 상세 정보를 확인하고, 실행 계획(Plan)을 조회할 수 있습니다.
-
실시간(Live) 모드와 과거 시간 조회를 모두 지원합니다.
슬로우 쿼리 수집을 위해 추가 에이전트가 필요합니다. 온프레미스 환경에서는 XOS 에이전트, 클라우드(AWS RDS 등) 환경에서는 DBXC 에이전트를 설치해야 합니다.
슬로우 쿼리 차트는 대시보드의 SQL Elapse Map 차트와 유사하지만, 다음과 같은 차이가 있습니다.
| 구분 | 슬로우 쿼리 | SQL Elapse Map |
|---|---|---|
| 데이터 소스 | DB가 남기는 슬로우 쿼리 로그 | 에이전트가 5초 간격으로 수집하는 액티브 세션 |
| 수행 시간 정확도 | DB가 기록한 실제 수행 시간으로 정확함 | 5초 간격 수집으로 최대 5초의 오차 발생 가능 |
| 수집 대상 | 설정 기준 시간(long_query_time)을 초과한 쿼리만 | 수집 시점에 실행 중인 모든 액티브 세션 |
사전 설정
이 화면에 데이터를 표시하려면 DB 설정, DBX Agent 설정, 환경에 따라 XOS Agent 또는 DBXC Agent 설정이 필요합니다.
DB 설정
my.cnf(또는 my.ini)에서 슬로우 쿼리 관련 파라미터를 설정합니다. 변경 후 MySQL 재시작이 필요합니다.
slow_query_log = 1
long_query_time = 3
log_output = FILE
| 파라미터 | 설명 |
|---|---|
slow_query_log | 슬로우 쿼리 로그 활성화 여부. 1이면 활성화됩니다. |
long_query_time | 설정값(초)을 초과하는 SQL을 로그에 기록합니다. 예: 3이면 3초 이상 소요되는 SQL이 기록됩니다. |
log_output | 로그 저장 방식. FILE이면 파일로, TABLE이면 mysql.slow_log 테이블에 기록합니다. |
log_output=TABLE로 설정한 경우 모니터링 계정에 조회 권한을 부여해야 합니다. 단, TABLE 모드는 슬로우 쿼리 발생량이 많을 경우 DB 성능에 영향을 줄 수 있으므로 주의가 필요합니다.
GRANT SELECT ON mysql.slow_log TO whatap;
DBX Agent 설정
whatap.conf에서 slow_query_log 옵션은 기본값이 ON이므로 별도 설정이 필요하지 않습니다.
slow_query_log=ON
| 설정 항목 | 타입 | 기본값 | 설명 |
|---|---|---|---|
slow_query_log | Boolean | ON | 슬로우 쿼리 로그 수집 활성화 |
OS 에이전트 설정
슬로우 쿼리 로그를 수집하려면 DB 운영 환경에 맞는 에이전트가 필요합니다.
| 환경 | 필요 에이전트 | 주요 설정 | 설정 안내 |
|---|---|---|---|
| 온프레미스 (Linux, Windows) | XOS 에이전트 | 없음 (자동 인식 실패 시 slow_query=에 로그 파일 경로 직접 지정) | XOS 에이전트 설정 |
| 클라우드 (AWS RDS, NCP 등) | DBXC 에이전트 | slow_query: true (config.yaml 인스턴스별 설정) | DBXC 에이전트 설정 |
슬로우 쿼리
기본 옵션
슬로우 쿼리 화면의 상단 필터 영역에서 조회할 기간과 대상 DB 인스턴스를 선택할 수 있습니다.
-
시간: 실시간(Live) 모드 또는 과거 시간을 선택합니다. Live 모드는 10초 간격으로 자동 갱신됩니다.
-
인스턴스: 조회 대상 DB 인스턴스를 선택합니다. 전체 또는 개별 인스턴스를 선택할 수 있습니다.
Slow Query 차트
슬로우 쿼리가 발생한 시점을 scatter 차트로 표시합니다. Y축은 수행 시간(초), X축은 시간입니다.
-
각 점은 하나의 슬로우 쿼리를 나타내며, 위에 위치할수록 오래 걸린 쿼리입니다.
-
차트 영역을 마우스 드래그하면 해당 구간의 쿼리만 하단 목록에 표시됩니다.
-
우측 상단의 ∧ / ∨ 버튼으로 Y축 범위를 조정할 수 있습니다.
Slow Query List
차트에서 선택한 구간에 해당하는 슬로우 쿼리 목록을 표시합니다.
| 컬럼 | 설명 |
|---|---|
Instance | 쿼리가 실행된 인스턴스 명 |
DB | 데이터베이스 명 |
Start Time | 쿼리 시작 시각 |
User | 실행 사용자 명 |
Host | 접속 호스트 |
ID | 스레드 ID |
Schema | 스키마 명 |
QC Hit | 쿼리 캐시 히트 여부 |
Query Time (s) | 쿼리 수행 시간 (초) |
Lock Time (s) | 잠금 대기 시간 (초) |
Rows Sent | 클라이언트에 반환된 행 수 |
Rows Examined | 쿼리 처리를 위해 검사한 행 수 |
Rows Affected | 변경된 행 수 |
Bytes Sent | 클라이언트에 전송된 바이트 수 |
SQL | 실행된 SQL 문 |
SQL 상세 보기
SQL 컬럼의 쿼리를 클릭하면 상세 정보 창이 열립니다.
데이터 해석 가이드
주요 확인 포인트
-
Query Time이 긴 쿼리: 개별 실행 시간이 긴 쿼리 → SQL 튜닝, 인덱스 점검
-
Lock Time이 긴 쿼리: 잠금 대기가 길어 성능 저하 → 트랜잭션 경합, 락 원인 확인
-
Rows Examined가 큰 쿼리: 검사 행 수 대비 반환 행 수가 적으면 → 인덱스 누락 또는 비효율적인 스캔
-
동일한 SQL이 반복적으로 나타나는 경우: 특정 쿼리가 지속적으로 느림 → 근본적인 튜닝 필요
-
특정 시간대에 집중된 경우: 해당 시간의 DB 부하, 락 경합, 배치 작업 등 외부 요인 확인
실전 활용 시나리오
시나리오 1. 느린 쿼리 실시간 모니터링
-
Live 모드에서 Slow Query 차트 관찰
-
새로운 점이 나타나면 해당 영역을 드래그하여 선택
-
Slow Query List에서 쿼리 확인하고 SQL 클릭하여 상세 정보 및 실행 계획 조회
시나리오 2. 특정 시간대 슬로우 쿼리 분석
-
시간 필터에서 문제가 발생한 시간대를 선택
-
차트에서 쿼리가 집중된 구간을 드래그
-
Query Time이 긴 쿼리부터 확인하여 원인 분석
시나리오 3. 슬로우 쿼리 기준 조정
-
슬로우 쿼리가 너무 많이 수집되면
long_query_time값을 높여 기준 완화 -
슬로우 쿼리가 수집되지 않으면
long_query_time값을 낮추거나,slow_query_log=ON설정 확인