1. 슬로우 쿼리란?
슬로우 쿼리(Slow Query)는 MySQL에서 설정된 시간보다 긴 실행 시간을 가진 SQL 문을 기록하는 기능입니다. 이 기능은 성능 문제를 파악하고 데이터베이스의 쿼리를 최적화하는 데 매우 유용합니다. 기본적으로 슬로우 쿼리 로깅은 비활성 상태이며, 필요에 따라 활성화해야 합니다.
2. 슬로우 쿼리 위치 확인하기
2.1 간단한 방법: SHOW PROFILES 사용
SHOW PROFILES 명령어는 쿼리의 실행 시간, I/O 작업, 컨텍스트 스위칭 등의 세부 정보를 제공합니다. 이는 주로 개발 단계나 문제 진단 시 사용하며, 프로덕션 환경에서는 지속적으로 활성화하지 않는 것이 좋습니다.
-- 성능 모니터링 활성화
SET profiling = 1;
-- SQL 실행
SELECT * FROM member;
-- 성능 분석 결과 보기
SHOW PROFILES;
2.2 상세 방법: PERFORMANCE_SCHEMA 사용 (권장되지 않음)
PERFORMANCE_SCHEMA는 더 복잡한 성능 분석을 위해 사용할 수 있지만, 리소스 소모가 크기 때문에 일반적으로 권장되지 않습니다.
-- PERFORMANCE_SCHEMA 상태 확인
SHOW VARIABLES LIKE 'performance_schema';
3. 슬로우 쿼리 로그 활성화
3.1 현재 슬로우 쿼리 로그 상태 확인
현재 슬로우 쿼리 로그가 활성화되어 있는지 확인하려면 다음 쿼리를 실행하세요. 기본값은 OFF이며, long_query_time는 기본 10초로 설정됩니다.
-- 슬로우 쿼리 로그 활성화 여부 확인
SHOW VARIABLES LIKE 'slow_query_log';
-- 슬로우 쿼리 시간 임계값 확인
SHOW VARIABLES LIKE 'long_query_time';
log_queries_not_using_indexes 옵션을 ON으로 설정하면 인덱스를 사용하지 않는 모든 쿼리도 슬로우 쿼리로 기록됩니다.
3.2 슬로우 쿼리 로그 활성화 방법
-- 일시적으로 슬로우 쿼리 로그 활성화
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.001; -- 테스트를 위해 0.001초 이상인 쿼리만 기록
-- my.cnf 파일에 영구적으로 설정
[mysqld]
log_output=TABLE
slow_query_log=ON
long_query_time=0.001
slow_query_log_file=/usr/local/mysql/logs/slow_query.log
4. 로그 출력 형식 선택
MySQL 슬로우 쿼리 로그는 두 가지 방식으로 저장될 수 있습니다.
4.1 TABLE 형식
테이블 형식은 슬로우 쿼리 정보를 mysql.slow_log 테이블에 저장합니다. 이를 통해 SQL로 직접 쿼리하여 분석할 수 있습니다.
-- 현재 로그 출력 형식 확인
SHOW VARIABLES LIKE 'log_output';
-- 로그 출력 형식 변경
SET GLOBAL log_output = 'TABLE';
4.2 FILE 형식
FILE 형식은 슬로우 쿼리 정보를 텍스트 파일로 저장합니다. 이는 파일 처리를 통해 더 복잡한 분석을 수행할 때 유용합니다.
-- 로그 출력 형식을 FILE로 변경
SET GLOBAL log_output = 'FILE';
5. 테스트
아래 쿼리는 설정된 시간(예: 0.001초)보다 오래 걸릴 경우 슬로우 쿼리로 기록됩니다.
-- 11초 동안 대기하는 쿼리
SELECT SLEEP(11);
-- 테이블 형식으로 기록된 슬로우 쿼리 확인
SELECT * FROM mysql.slow_log;
-- 슬로우 로그 테이블 초기화
TRUNCATE TABLE mysql.slow_log;
6. FILE 형식 로그 확인
로그 파일 경로를 찾아 해당 파일을 열어 내용을 확인하세요.