> 백엔드 개발 > PHP 문제 > php mysql 느린 쿼리란 무엇입니까?

php mysql 느린 쿼리란 무엇입니까?

藏色散人
풀어 주다: 2023-03-13 19:22:02
원래의
2413명이 탐색했습니다.

php mysql 느린 쿼리는 상대적으로 느리게 실행되는 SQL 문을 로그에 기록하는 것을 의미합니다. 느린 쿼리 로그를 켜면 MySQL이 지정된 시간을 초과하는 쿼리를 기록하고 성능 병목 현상을 찾아 분석하여 데이터베이스를 더 잘 최적화할 수 있습니다. 시스템 성능.

php mysql 느린 쿼리란 무엇입니까?

이 글의 운영 환경: windows7 시스템, PHP7.1 버전, DELL G3 컴퓨터

php mysql 느린 쿼리란 무엇입니까?

MySQL 느린 쿼리는 느리게 실행되는 SQL 문을 로그에 기록합니다. 이 기능을 사용하려면 활성화해야 합니다.

1. 소개

느린 쿼리 로그를 활성화하면 MySQL이 지정된 시간을 초과하는 쿼리를 기록할 수 있으며, 성능 병목 현상을 찾아 분석하여 데이터베이스 시스템의 성능을 더 잘 최적화할 수 있습니다.

2. 파라미터 소개

slow_query_log 느린 쿼리 오픈 상태

slow_query_log_file 느린 쿼리 로그가 저장되는 위치 (이 디렉터리는 MySQL 실행 계정의 쓰기 권한이 필요하며 일반적으로 MySQL 데이터 저장 디렉터리로 설정됩니다.)

long_query_time 쿼리 초과 시간 1초마다 기록, 기본값은 10초

3. 느린 쿼리 켜기

(1) 느린 쿼리 관련 매개변수 보기

mysql> show variables like 'slow_query%';
+---------------------------+-----------------------------------+
| Variable_name             | Value                              |
+---------------------------+-----------------------------------+
| slow_query_log            | OFF                                |
| slow_query_log_file       | /usr/local/var/mysql/slow.log          |
+---------------------------+-----------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
로그인 후 복사

(2) 설정 방법

방법 1: 전역 변수 설정

slow_query_log 전역 변수를 "ON" 상태로 설정

mysql> set global slow_query_log='ON';
로그인 후 복사

느린 쿼리 로그가 저장되는 위치 설정

mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';
로그인 후 복사

느린 쿼리 시간을 설정하고, 1초를 초과하면 쿼리를 기록

mysql> set global long_query_time=1;
로그인 후 복사

방법 2: 구성 파일 설정

[mysqld] 아래 구성 파일 my.cnf를 수정합니다. 아래에

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/var/mysql/slow.log 
long_query_time = 1
로그인 후 복사

를 추가합니다. (3) MySQL 서비스 다시 시작

service mysqld restart
로그인 후 복사

(4) 느린 쿼리 로그 분석

느린 쿼리 로그 섹션 차단:

# Time: 180918 19:06:21
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707197
# Query_time: 1.015429  Lock_time: 0.000116 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '78436'
            and app_type = 'YGY'
        order by binding_time desc;
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707236
# Query_time: 1.021662  Lock_time: 0.000083 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '14433'
            and app_type = 'YGY'
        order by binding_time desc;
로그인 후 복사

여기에서 볼 수 있습니다:

Query_time(느린 쿼리 문의 쿼리 시간). 설정된 1초를 초과했습니다.

Rows_sent(느린 쿼리에서 반환된 레코드) 단 1

Rows_examined(느린 쿼리에서 스캔한 행 수) 여기서 44438이 반환되었습니다. -> 여기에서 문제가 크다는 것을 알 수 있습니다

이제 이 SQL 문을 데이터베이스에 넣어 실행하고 EXPLAIN을 사용하여 실행 계획을 분석하겠습니다

EXPLAIN                                
select                                 
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,                        
        nodisturb_mode, nodisturb_start_time,                          
        nodisturb_end_time, binding_time, device_os_type, app_type, state                          
        from app_mobile_device                         
        where user_id = '78436'                            
            and app_type = 'YGY'                       
        order by binding_time desc;
로그인 후 복사

쿼리 결과는 다음과 같습니다.

php mysql 느린 쿼리란 무엇입니까?

매개변수 설명:

php mysql 느린 쿼리란 무엇입니까?

여기에서 찾을 수 있습니다: 행은 쿼리의 행 수입니다. 쿼리 40,000줄 이상을 읽은 후에는 확실히 느립니다.

여기에는 여러 가지 조건이 있고 인덱스가 사용되지 않기 때문에 유일한 방법은 인덱스를 추가하는 것입니다.

선택 항목에 일반 다중 열 인덱스를 추가합니다. 왜냐하면 이 테이블의 디자인에 문제가 있었기 때문입니다. 시작하여 중복이 발생했습니다. 데이터, 고유 인덱스를 설정할 수 없습니다.

ALTER  TABLE  app_mobile_device  ADD  INDEX user_app_type_only (  `user_id` ,`app_type` )
로그인 후 복사
인덱스가 설정되었습니다. 지금 바로 SQL의 실행 계획을 살펴보겠습니다.

php mysql 느린 쿼리란 무엇입니까?

확인된 행 수가 확실히 줄어든 것을 확인할 수 있습니다.

이제 슬로우 쿼리의 활용과 최적화는 기본적으로 완료되었습니다.

추천 학습: "

PHP 비디오 튜토리얼"

위 내용은 php mysql 느린 쿼리란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿