MySQL 재시작 없이 느린 쿼리 로그 활성화하기
MySQL에서는 SET 문을 사용하면 서버를 다시 시작하지 않고도 느린 쿼리 로그(slow query log)를 즉시 활성화할 수 있습니다. 운영 중인 데이터베이스 환경에서 성능 문제를 분석할 때 매우 유용한 방법입니다.
1. 느린 쿼리 로그 활성화 구문
기본적인 구문은 다음과 같습니다.
SET GLOBAL slow_query_log = 'Value';
위 구문에서 Value 자리에는 ON 또는 OFF 값을 입력할 수 있습니다. 느린 쿼리 로그를 활성화하려면 아래와 같이 실행합니다.
mysql> SET GLOBAL slow_query_log = 'ON'; Query OK, 0 rows affected (0.00 sec)
2. 설정 적용 여부 확인하기
느린 쿼리 로그가 정상적으로 켜졌는지 확인하려면 다음 쿼리를 실행합니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'slow\_%';
실행 결과는 다음과 같습니다.
+---------------------+--------------------------+ | Variable_name | Value | +---------------------+--------------------------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | DESKTOP-QN2RB3H-slow.log | +---------------------+--------------------------+ 3 rows in set (0.00 sec)
slow_query_log 값이 ON으로 표시되면 정상적으로 활성화된 것입니다. 또한 slow_query_log_file 변수를 통해 로그가 기록될 파일의 위치를 확인할 수 있습니다.
3. 느린 쿼리 판정 기준 시간 설정하기
기준 시간(초)보다 오래 걸리는 쿼리는 모두 느린 쿼리 로그 파일에 기록됩니다. 이 기준 시간은 long_query_time 변수로 조절할 수 있으며, 아래 예시에서는 20초로 설정했습니다.
mysql> SET GLOBAL long_query_time = 20; Query OK, 0 rows affected (0.00 sec)
설정한 시간이 제대로 반영되었는지 확인합니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
실행 결과는 다음과 같습니다.
+-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 20.000000 | +-----------------+-----------+ 1 row in set (0.00 sec)
4. 로그 플러시(Flush)하기
위의 설정 작업을 마친 후에는 로그를 플러시하여 변경 사항을 적용하는 것이 좋습니다.
mysql> FLUSH LOGS; Query OK, 0 rows affected (0.25 sec)
참고: 영구적인 설정 방법
참고 − 위의 SET 문은 MySQL 서버가 재시작되면 초기화될 수 있습니다. 영구적으로 설정하거나 비활성화하려면 my.cnf(또는 Windows의 경우 my.ini) 설정 파일을 수정해야 합니다. 예를 들어 slow_query_log = 0으로 설정하면 느린 쿼리 로그가 비활성화되며, slow_query_log = 1로 설정하면 서버 시작 시 자동으로 활성화됩니다.