>  기사  >  데이터 베이스  >  mysql에서 느린 쿼리 로그를 활성화하는 방법

mysql에서 느린 쿼리 로그를 활성화하는 방법

PHPz
PHPz원래의
2023-04-20 10:12:007889검색

MySQL 데이터베이스를 일상적으로 사용하는 경우 쿼리 속도와 효율성을 높이기 위해 일반적으로 인덱스와 옵티마이저를 사용합니다. 그러나 때로는 문제를 더 잘 찾고 데이터베이스를 더 정확하게 최적화하기 위해 쿼리 문의 특정 실행을 알아야 할 수도 있습니다. 이때 MySQL의 Slow Query Log 기능을 사용해야 합니다.

느린 쿼리 로그에는 실행 시간이 특정 임계값을 초과하는 모든 SQL 문을 기록할 수 있으므로 문제 해결 및 최적화가 가능합니다. 이 글에서는 MySQL 데이터베이스에서 느린 쿼리 로그를 활성화하는 방법을 소개하고, 느린 쿼리 로그의 관련 매개변수와 최적화 방법을 자세히 설명합니다.

1. 느린 쿼리 로그를 켜세요

  1. 구성 파일을 수정하세요

MySQL 구성 파일 my.cnf 또는 my.ini에 다음 구성을 추가하세요.

slow_query_log = 1 #开启慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log #日志文件路径
long_query_time = 3 #超过3s即为慢查询
log_queries_not_using_indexes = 1 #记录未使用索引的查询

Slow_query_log = 1은 느린 쿼리 로그를 켜는 것을 의미합니다. , Slow_query_log_file이 지정됩니다. long_query_time은 쿼리 실행 시간이 몇 초를 초과하여 느린 쿼리로 간주되는지를 나타냅니다. log_queries_not_using_indexes는 인덱스를 사용하지 않는 쿼리를 기록할지 여부를 나타냅니다.

  1. SET 명령을 사용하여 구성을 동적으로 수정하세요

구성 파일을 수정하는 것 외에도 SET 명령을 통해 매개변수를 동적으로 수정할 수도 있습니다. 예를 들어 다음 명령문을 통해 MySQL 명령줄에서 느린 쿼리 로그를 켤 수 있습니다.

mysql> SET global slow_query_log = 1;
mysql> SET global slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET global long_query_time = 3;
mysql> SET global log_queries_not_using_indexes = 1;

위 코드에서 SET global은 전역적으로 적용된다는 의미입니다. 즉, 모든 연결에서 이러한 매개변수를 사용합니다.

물론, 로컬 연결의 매개변수만 설정하려면 SET SESSION 명령을 사용할 수 있습니다. 예:

mysql> SET SESSION slow_query_log = 1;
mysql> SET SESSION slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET SESSION long_query_time = 3;
mysql> SET SESSION log_queries_not_using_indexes = 1;

2. 느린 쿼리 로그 구성 매개변수 최적화

  1. slow_query_log_file

느린 쿼리 로그를 켜기 전에 지정된 로그 파일이 있는 디렉터리가 이미 존재하고 쓰기 권한이 있는지 확인해야 합니다. . 디렉터리가 존재하지 않으면 먼저 디렉터리를 만들어야 합니다.

다음 명령을 사용하여 MySQL 프로세스의 현재 작업 디렉터리를 볼 수 있습니다.

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

위의 예에서 볼 수 있듯이 MySQL 프로세스의 작업 디렉터리는 /var/lib/mysql/이며 다음이 있습니다. 이 디렉터리의 로그 디렉터리입니다. 따라서 이 파일에 느린 쿼리 로그를 기록하려면 my.cnf에 다음 구성만 추가하면 됩니다.

slow_query_log_file = /var/lib/mysql/logs/slow.log
  1. long_query_time

long_query_time의 기본값은 10초입니다. 실행 시간 10초 이상 소요되는 쿼리문은 느린 쿼리 로그에 기록됩니다. 일반적인 상황에서는 이 시간이 약간 길 수 있습니다. 실제 조건에 따라 더 짧은 시간으로 설정하여 느린 쿼리를 더 빠르게 발견할 수 있습니다.

쿼리 문을 오랫동안 실행하는 이유는 문 자체가 비효율적이며 일반적으로 최적화가 필요하기 때문인 경우가 많습니다. 실제 사용에서는 long_query_time 시간을 점진적으로 줄여 효율성이 떨어지는 명령문을 찾아 최적화하고 쿼리 효율성을 향상시킬 수 있습니다.

  1. log_queries_not_using_indexes

log_queries_not_using_indexes 매개변수를 1로 설정하면 인덱스를 사용하지 않고 실행된 모든 쿼리가 기록됩니다. 이를 통해 잠재적인 문제를 식별하고 적시에 최적화할 수 있습니다. 그러나 경우에 따라 인덱스가 없는 쿼리가 정상이므로 일부 잘못된 긍정이 발생할 수 있습니다.

log_queries_not_using_indexes 매개변수를 사용할 때는 주의가 필요합니다. 전역 변수로 설정하지 않는 것이 좋습니다. 필요할 때 동적으로 설정하도록 선택할 수 있습니다. 왜냐하면 이 매개변수가 항상 켜져 있으면 MySQL의 성능에 부정적인 영향을 미쳐 데이터베이스의 전반적인 운영 효율성이 저하될 수 있기 때문입니다.

3. 느린 쿼리 로그 보기 및 분석

느린 쿼리 로그를 켜면 MySQL은 실행 시간이 임계값을 초과하는 모든 쿼리 문을 기록하기 시작합니다. 다음 명령을 사용하여 느린 쿼리 로그를 볼 수 있습니다.

mysql> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+------------------------+
| Variable_name       | Value                  |
+---------------------+------------------------+
| slow_query_log_file | /var/lib/mysql/slow.log |
+---------------------+------------------------+
1 row in set (0.00 sec)

위 출력에서 ​​볼 수 있듯이 현재 느린 쿼리 로그 파일 경로는 /var/lib/mysql/slow.log입니다.

느린 쿼리 로그의 특정 내용을 보고 싶다면 다음 명령어를 사용하면 됩니다.

mysql> mysqldumpslow -s t /var/lib/mysql/slow.log

그 중 -s는 시간순으로 정렬한다는 의미이고, -t는 처음 10개 레코드만 표시한다는 의미입니다. 모든 쿼리 기록을 보려면 -t 매개변수를 제거하면 됩니다.

4. 느린 쿼리 로그 최적화

느린 쿼리 로그를 활성화하는 것은 성능 문제를 발견하고 최적화하는 데 도움이 되는 매우 좋은 방법입니다. 하지만 실제 사용 시에는 다음 사항에도 주의가 필요합니다.

  1. 느린 쿼리 로그 파일의 크기는 계속해서 늘어나므로 정기적으로 정리가 필요합니다. 디스크 공간 부족을 방지하려면 my.cnf에서 max_slowlog_size를 적절한 값으로 설정하는 것이 좋습니다.
  2. 느린 쿼리를 로깅하면 MySQL 성능에 부정적인 영향을 미치므로 프로덕션 환경에서는 필요한 로깅만 활성화하는 것이 좋습니다. 일반적으로 로그 수준을 설정하고 주요 정보만 기록합니다.
  3. pt-query-digest 등 느린 쿼리 로그를 분석하는 도구를 사용할 수 있습니다. 이러한 도구는 쿼리 속도 저하의 원인을 더 잘 발견하고 실행 계획을 최적화하는 데 도움이 될 수 있습니다.

간단히 말하면 MySQL 느린 쿼리 로그를 활성화하는 것이 좋은 습관입니다. 프로덕션 환경에서는 데이터베이스 성능과 안정성을 보장하기 위해 매개변수를 신중하게 구성하고 관련 도구를 사용해야 합니다.

위 내용은 mysql에서 느린 쿼리 로그를 활성화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.