5.2.5 슬로우 쿼리 로그
슬로우 쿼리 로그는 실행하는 데 걸린 시간이 long_query_time
초를 초과 적어도 min_examined_row_limit
행을 검사 할 필요가 있었다 SQL 문으로 구성됩니다. long_query_time
의 최소값과 디폴트 값은 각각 0과 10입니다. 값은 마이크로 초 정도까지 지정할 수 있습니다. 파일에 로깅의 경우 시간은 마이크로 초 부분을 포함하여 기록됩니다. 테이블에 로깅의 경우 시간의 정수 부분 만 기록 마이크로 초 부분은 무시됩니다.
기본적으로 관리 문은 기록되지 않고 참조 인덱스를 사용하지 않는 쿼리도 기록되지 않습니다. 나중에 설명하도록이 동작은 log_slow_admin_statements
및 log_queries_not_using_indexes
을 사용하여 변경할 수 있습니다.
초기 잠금을 획득하는 시간은 실행 시간으로 계산되지 않습니다. mysqld가 슬로우 쿼리 로그에 문을 쓰는 것은 명령문이 실행되고 모든 잠금이 해제 된 후이기 때문에 로그 순서가 실행 순서와 다를 수 있습니다.
기본적으로 슬로우 쿼리 로그는 비활성화되어 있습니다. 초기 슬로우 쿼리 로그 상태를 명시 적으로 지정하려면 --slow_query_log[={0|1}]
를 사용합니다. 인수를 지정하지 않거나 인수가 1이면 --slow_query_log
의해 로그가 활성화됩니다. 인수가 0 인 경우이 옵션은 로그를 비활성화합니다. 로그 파일 이름을 지정하려면 --slow_query_log_file=
을 사용합니다. 로그 대상을 지정하려면 ( 섹션 5.2.1 "일반 쿼리 로그와 슬로우 쿼리 로그 대상 선택" 에서 설명되는) file_name
--log-output
을 사용합니다.
슬로우 쿼리 로그 파일의 이름을 지정하지 않으면 기본 이름은
입니다. 서버는 다른 디렉토리를 지정하는 절대 경로 이름이 지정되지 않는 한 데이터 디렉토리에 파일을 만듭니다. host_name
-slow.log
실행시에 슬로우 쿼리 로그를 비활성화 또는 활성화하거나 로그 파일 이름을 변경하거나하려면 글로벌 slow_query_log
및 slow_query_log_file
시스템 변수를 사용합니다. slow_query_log
을 0 (또는 OFF
)하면 로그가 비활성화하고 1 (또는 ON
)에서 활성화합니다. 로그 파일의 이름을 지정하려면 slow_query_log_file
을 지정합니다. 로그 파일이 이미 열려있는 경우 로그 파일을 닫고 새 파일을 엽니 다.
슬로우 쿼리 로그가 활성화되면 서버는 --log-output
옵션 또는 log_output
시스템 변수에 의해 지정된 모든 대상에 출력을 씁니다. 로깅을 사용하면 서버는 로그 파일을 열고 로그 파일에 부팅 메시지를 씁니다. 그러나 FILE
로그 대상이 선택되지 않는 한 파일에 대한 더 이상의 쿼리 로깅이 수행되지 않습니다. 대상이 NONE
의 경우, 슬로우 쿼리 로그가 유효한 경우에도 서버는 쿼리를 쓰지 않습니다. 로그 출력 값에 FILE
이 포함되어 있지 않은 경우, 로그 파일 이름을 설정해도 로깅에 미치는 영향은 없습니다.
--log-short-format
옵션을 사용하는 경우 서버에 의해 슬로우 쿼리 로그 (및 바이너리 로그)에 기록되는 정보가 적습니다.
슬로우 쿼리 로그에 기록되는 문 저속 관리 문을 포함하려면 log_slow_admin_statements
시스템 변수를 사용합니다. 관리 문은 ALTER TABLE
, ANALYZE TABLE
, CHECK TABLE
, CREATE INDEX
, DROP INDEX
, OPTIMIZE TABLE
및 REPAIR TABLE
이 포함됩니다.
슬로우 쿼리 로그에 기록되는 문에 행 참조에 대한 인덱스를 사용하지 않는 쿼리를 포함하려면 log_queries_not_using_indexes
시스템 변수를 사용합니다. 그런 쿼리가 기록되면 슬로우 쿼리 로그가 급속히 증대 할 수 있습니다. log_throttle_queries_not_using_indexes
시스템 변수를 설정하여이 쿼리에 속도 제한을 부과 할 수 있습니다. 기본적으로이 변수는 0에서 제한이 없음을 의미합니다. 양수 값을 지정하면 인덱스를 사용하지 않는 쿼리 로깅에 대해 분당 제한이 부과됩니다. 이러한 초기 쿼리에 의해 60 초 창이 열리고 그 기간 내에 서버는 쿼리를 미리 정해진 한도까지 기록하고, 그 후에 추가 쿼리를 억제합니다. 윈도우가 종료 할 때 억제 된 쿼리가 존재하는 경우, 서버는 쿼리가 존재 한 수와 소요 된 집계 시간을 나타내는 요약을 기록합니다. 인덱스를 사용하지 않는 다음의 쿼리를 서버 로그에 기록 할 때, 다른 60 초 창이 시작됩니다.
서버는 슬로우 쿼리 로그에 쿼리를 작성할지 여부를 판단하기 위해 제어 매개 변수를 다음 순서로 사용합니다.
쿼리는 관리 문 아닌지,
log_slow_admin_statements
이 활성화되어있을 필요가있다.쿼리에 적어도
long_query_time
초 걸려 있거나log_queries_not_using_indexes
이 유효하다고 쿼리는 행 참조 인덱스를 사용하지 않는다.쿼리는 적어도
min_examined_row_limit
행을 검사 할 필요가있다.쿼리는
log_throttle_queries_not_using_indexes
설정에 의해 억제되어 하여서는 아니된다.
서버는 쿼리 캐시에 의해 처리되는 쿼리를 던져 쿼리 로그에 기록하고, 테이블에 0 행 또는 열만 없기 때문에 인덱스가 있는지 메리트가 없다 같은 쿼리도 슬로우 쿼리 로그에 기록하지 않습니다.
기본적으로 복제 슬레이브는 복제 된 쿼리를 던져 쿼리 로그에 기록하지 않습니다. 이를 변경하려면 log_slow_slave_statements
시스템 변수를 사용합니다.
MySQL 5.6.3 이후에서는 슬로우 쿼리 로그에 기록되는 문 암호는 서버에 의해 고쳐 쓸 수있어 문자 그대로 일반 텍스트로 표시되는 것은 아닙니다. MySQL 5.6.3 이전에서는 문에서 암호는 다시하지 않기 때문에, 슬로우 쿼리 로그를 보호하도록하십시오. 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오.
슬로우 쿼리 로그는 실행 시간이 오래 걸려 있기 때문에 최적화 후보 쿼리를 찾는 데 사용할 수 있습니다. 그러나 긴 슬로우 쿼리 로그를 조사하는 것은 어려운 작업이 될 수 있습니다. 이를 쉽게하기 위해 mysqldumpslow 명령을 사용하여 슬로우 쿼리 로그 파일을 처리하고 로그에 표시되는 쿼리를 요약 할 수 있습니다. 섹션 4.6.9 "mysqldumpslow - 슬로우 쿼리 로그 파일의 요약" 을 참조하십시오.