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

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

藏色散人
藏色散人원래의
2021-11-10 09:49:022410검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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