DB

[MySQL] 슬로우 쿼리 로그 설정 방법 (my.cnf + RDS 포함)

인생아 2025. 7. 4. 17:45
반응형

슬로우 쿼리 로그(slow query log)는 MySQL 성능 최적화를 위한 핵심 기능이다.
하지만 이 로그는 기본적으로 비활성화되어 있기 때문에 명시적인 설정 없이는 작동하지 않는다.

🛠️ 슬로우 쿼리 로그 설정 개요

슬로우 쿼리 로그를 활성화하려면 다음 세 가지 요소를 반드시 지정해야 한다.

  1. 로그 기능 활성화 (slow_query_log)
  2. 로그 저장 경로 지정 (slow_query_log_file)
  3. 기록 기준 시간 설정 (long_query_time)

선택적으로 아래 옵션도 함께 설정하면 좋다.

  • log_queries_not_using_indexes: 인덱스를 사용하지 않은 쿼리도 기록
  • min_examined_row_limit: 일정 수 이상의 rows를 검색한 경우만 기록
반응형

🖥️ MySQL 설치형 (my.cnf) 설정 방법

✅ 1. my.cnf 파일 위치 찾기

Linux 기준 기본 경로는 다음과 같다:

/etc/my.cnf
/etc/mysql/my.cnf

아래 명령어로 MySQL이 사용하는 설정 파일 위치를 확인할 수 있다:

mysql --help | grep my.cnf

✅ 2. my.cnf 파일에 설정 추가

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
min_examined_row_limit = 100

✅ 3. 로그 파일 경로 디렉토리 생성 (필요 시)

sudo mkdir -p /var/log/mysql
sudo chown mysql:mysql /var/log/mysql

✅ 4. MySQL 서비스 재시작

sudo systemctl restart mysql

✅ 5. 정상 적용 확인

MySQL 콘솔에서 다음 명령으로 확인한다:

SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'long_query_time';

✅ 예제 결과

slow_query_log: ON  
slow_query_log_file: /var/log/mysql/mysql-slow.log  
long_query_time: 2.000000
반응형

☁️ AWS RDS에서 슬로우 쿼리 로그 설정 방법

AWS RDS에서는 my.cnf에 직접 접근할 수 없기 때문에 **파라미터 그룹(Parameter Group)**을 통해 설정해야 한다.

✅ 1. RDS 콘솔 → Parameter Group 생성

  • RDS > Parameter Groups > Create
  • Parameter group family: 예) mysql8.0
  • Type: DB Parameter Group
  • 이름: custom-mysql-slowlog

✅ 2. 설정 변경

아래 항목들을 찾아 다음과 같이 변경한다:

Parameter
slow_query_log 1
long_query_time 2
log_queries_not_using_indexes 1
min_examined_row_limit 100
 

변경 후 저장을 반드시 클릭한다.

✅ 3. 해당 파라미터 그룹을 DB 인스턴스에 적용

  • RDS > DB 선택 > Modify
  • DB parameter group에서 생성한 그룹 선택
  • 저장 후, 필요 시 재부팅 (적용 조건에 따라 다름)

✅ 4. 로그 확인 방법

슬로우 쿼리는 RDS에서는 CloudWatch Logs 또는 RDS 콘솔을 통해 확인한다:

  1. RDS > 로그 및 모니터링 > 로그 파일에서 slowquery/mysql-slowquery.log 확인
  2. 또는 CloudWatch Logs에 연동하여 실시간 모니터링 가능

🧪 SET GLOBAL로 실시간 설정하는 방법

my.cnf나 RDS 설정 외에도, 다음 명령어로 MySQL 콘솔에서 일시적으로 설정할 수 있다:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 'ON';

이 설정은 서버 재시작 시 초기화되므로, 영구 설정은 my.cnf 또는 RDS Parameter Group으로 해야 한다.

반응형

🧠 실무 팁: 슬로우 쿼리 로그 설정 시 유의사항

  • long_query_time을 0.1 이하로 설정하면 로그 폭증 주의!
  • 개발 환경에서는 long_query_time = 0으로 모든 쿼리를 확인해도 OK
  • 슬로우 쿼리 로그는 반드시 로테이션 및 압축 처리를 주기적으로 설정해야 한다 (logrotate 활용)
  • 설정만 하고 로그 분석하지 않으면 무의미하다. 반드시 mysqldumpslow, pt-query-digest 등의 도구와 함께 사용하자

✅ 정리

  • 슬로우 쿼리 로그는 slow_query_log, long_query_time, slow_query_log_file 등 기본 설정이 필요하다
  • MySQL 설치형은 my.cnf에 직접 설정하고, RDS는 파라미터 그룹을 사용한다
  • 실시간 테스트에는 SET GLOBAL 명령어를 활용할 수 있지만, 영구 반영하려면 설정 파일 수정을 해야 한다
  • 로그 설정 후에는 로그 분석 도구를 통해 실제 성능 병목을 개선하는 것이 핵심이다

🔗 공식 문서 참고
MySQL 8.0 Reference Manual - The Slow Query Log

 

반응형