MySQL 느린 쿼리 솔루션

다음 기사를 다시 인쇄하십시오.

MySQL은 느린 쿼리 로그를 엽니 다.
MySQL은 자세히
보기 프로필보기 SQL 실행 수명주기를 설명합니다.

하나, 느린 쿼리 로그 시작

느린 로그를 켜면 소규모 프로젝트, 온라인 상태가 아닌 프로젝트 또는 긴급 상황에만 적합합니다. 느린 로그 쿼리를 켜면 데이터베이스에 대한 부담이 증가하기 때문입니다. 따라서 일반적으로 데이터 작업 시간을 로그 파일에 기록하는 데 백그라운드를 사용하며 로그는 매주 정기적으로 지워집니다.

매개 변수 설명 :

slow_query_log 慢查询开启状态,ON开启,OFF关闭
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录

느린 쿼리가 켜져 있는지 확인

show variables like 'slow_query%';

작업 결과 :

여기에 사진 설명 삽입

show variables like 'long_query_time';

작업 결과 :
여기에 사진 설명 삽입
기본 쿼리는 기록 전 10 초 이상입니다.

느린 쿼리 활성화

1. 전역 변수 설정 (이러한 방식으로 데이터베이스를 다시 시작하면 모두 실패하고 다시 구성해야 함)

# 将 slow_query_log 全局变量设置为“ON”状态
set global slow_query_log='ON'; 
# 设置慢查询日志存放的位置
set global slow_query_log_file='/usr/local/mysql/data/slow.log'; 
# 设置查询超过1秒就记录(如果有时候用命令不起作用,那么可以关闭再打开)
set global long_query_time=1;

2. my.cnf 구성 파일을 수정합니다 (서버를 다시 시작해도 영향을주지 않음).

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

slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log     //linux
long_query_time = 1

MySQL 서비스 다시 시작

service mysqld restart

둘째, 느린 쿼리 SQL 분석

이 SQL 문의 실행 계획을보고, SQL 문이 인덱스를 사용하는지, 전체 테이블 스캔이 수행되는지 확인합니다.

explain select * from emp where name = 'Jefabc';

작업 결과 :
여기에 사진 설명 삽입

신분증 식별자 선택
선택 _ 유형 쿼리 유형을 나타냅니다.
출력 결과 세트 표
파티션 일치하는 파티션
유형 테이블의 연결 유형을 나타냅니다.
possible_keys 쿼리 할 때 사용할 수있는 인덱스를 나타냅니다.
사용 된 실제 인덱스를 나타냅니다.
key_len 색인 필드 길이
심판 열과 인덱스 비교
스캔 된 행 수 (예상 행 수)
거르는 테이블 기준으로 필터링 된 행 비율
특별한 구현 설명 및 설명

select_type 쿼리의 유형은 단일 테이블 쿼리, 통합 쿼리, 하위 쿼리 등입니다.

단순한 UNION 또는 하위 쿼리 등을 사용하지 않는 간단한 SELECT
일 순위 하위 쿼리의 가장 바깥 쪽 쿼리입니다. 쿼리에 복잡한 하위 부분이 포함되어 있으면 가장 바깥 쪽 선택 항목이 PRIMARY로 표시됩니다.
노동 조합 UNION의 두 번째 또는 후속 SELECT 문
종속 연합 UNION의 두 번째 또는 후속 SELECT 문은 외부 쿼리에 따라 다릅니다.
연합 결과 UNION의 결과, union 문의 두 번째 select는 모든 선택을 시작합니다.
SUBQUERY 하위 쿼리의 첫 번째 SELECT, 결과는 외부 쿼리에 의존하지 않습니다.
종속 하위 쿼리 하위 쿼리의 첫 번째 SELECT는 외부 쿼리에 따라 다릅니다.
파생 파생 테이블의 SELECT 및 FROM 절에있는 하위 쿼리
캐치 할 수없는 하위 쿼리 하위 쿼리의 결과를 캐시 할 수 없습니다. 외부 링크의 첫 번째 줄을 다시 평가해야합니다.

테이블에 대한 유형 액세스

최상에서 최악으로 정렬 : system> const> eq_ref> ref> ref_or_null> index_merge> unique_subquery> index_subquery> range> index> all.

모두 전체 테이블을 탐색하여 일치하는 행을 찾습니다.
인덱스 인덱스 트리 탐색
범위 주어진 범위의 행만 검색하고 인덱스를 사용하여 행 선택
심판 위 테이블의 연결 일치 조건, 즉 인덱스 열에서 값을 찾는 데 사용되는 열 또는 상수를 나타냅니다.
eq_ref ref와 유사하게 차이점은 사용 된 인덱스가 고유 인덱스 기본 키이거나 고유하다는 것입니다.
const 、 시스템 MySQL이 쿼리의 특정 부분을 최적화하고이를 상수로 변환 할 때 이러한 유형의 액세스를 사용하십시오. where리스트에 primary key가 있으면 MySQL은 질의를 상수로 변환 할 수 있습니다. System은 const 타입의 특별한 경우입니다. 질의 테이블에 행이 하나만있는 경우 system을 사용하십시오.
없는 MySQL은 최적화 과정에서 문을 분해하고 실행 중 테이블이나 인덱스에 접근 할 필요도 없다.

possible_keys 가능한 인덱스

MySQL이 테이블에서 레코드를 찾는 데 사용할 수있는 인덱스를 지적합니다. 쿼리와 관련된 필드에 인덱스가 있으면 인덱스가 나열되지만 쿼리에서 사용되지 않을 수 있습니다.)

실제 사용 된 키 인덱스

키 열에는 MySQL이 실제로 사용하기로 결정한 키 (인덱스)가 표시되며 이는 possible_keys에 포함되어야합니다.

인덱스를 선택하지 않은 경우 키는 NULL입니다. MySQL이 possible_keys 열의 인덱스를 사용하거나 무시하도록 강제하려면 쿼리에서 FORCE INDEX, USE INDEX 또는 IGNORE INDEX를 사용하십시오.

셋, SQL 분석을위한 프로필보기

1. 쇼 프로필이란?

현재 세션에서 SQL 실행의 리소스 소모량을 분석하기 위해 mysql에서 제공하는 SQL 튜닝 방법으로, Explain보다 세분화되어 있습니다. 기본 닫힌 상태이며 마지막 15 개 실행의 결과를 저장합니다.

2. 매개 변수가 켜져 있는지 확인하고 켜는 방법

1. 켜져 있는지 확인

show  VARIABLES like 'profiling';

작업 결과 :
여기에 사진 설명 삽입
2. 기본적으로 닫혀있는 Open Profile이 이제 열립니다.

set profiling = 1;

3. 프로필 사용

1. 실행 중 느린 SQL

select * from emp group by id%10;
select * from emp group by id%20 order by 5;

2. SQL 실행

show profiles;

작업 결과 :
여기에 사진 설명 삽입

3. SQL 진단 및 CUP 사용량보기, 형식 : 쿼리 [Query_ID]에 대한 프로필 cpu, 블록 io 표시

show profile cpu,block io for query 12

실행 결과
여기에 사진 설명 삽입
cpu 및 block io 만 여기에 나열됩니다. 물론 진단 유형은 일반적으로 사용되는 cpu 및 block io보다 많습니다.

ALL 显示所有的开销信息
BLOCK IO 显示块IO相关开销
CONTEXT SWITCHES 上下文切换相关开销
CPU  显示CPU相关开销信息
IPC  显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销
SOURCE  显示和Source_function,Source_file,Source_line相关的开销信息
SWAPS   显示交换次数相关开销的信息

다음 4 개의 Status 발생은 큰 문제를 유발합니다.

converting HEAP to MyISAM :查询结果太大,内存都不够用了往磁盘上搬
Creating tmp table : 创建临时表,拷贝数据到临时表,用完再删除
Copy to tmp table on disk : 把内存中临时表赋值到磁盘,很危险
locked   :存在锁

다음과 같이 :
여기에 사진 설명 삽입
tmp 테이블 생성, tmp 테이블에 복사, tmp 테이블 제거는 물론 느립니다.

넷째, SQL 최적화

SQL 문 최적화

추천

출처blog.csdn.net/fangye1/article/details/114087488