>  기사  >  데이터 베이스  >  MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석

MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석

一个新手
一个新手원래의
2017-09-09 14:03:472321검색


느린 로그 쿼리

MySQL의 느린 로그 쿼리는 MySQL에서 제공하는 로그 기록입니다. SQL에서 특정 실행 시간이 long_query_time 값을 초과하는 문을 기록합니다. . long_query_time의 기본 시간은 10입니다. 이는 10개 이상의 문을 실행한다는 의미입니다.

예를 들어 SQL이 5초 이상 실행되면 SQL이 느린 것으로 간주하므로 MySQL은 5초 이상 SQL을 기록하여 종합적인 분석을 할 수 있습니다.

기본적으로 MySQL 데이터베이스는 느린 쿼리 로그를 활성화하지 않으므로 이 매개변수를 수동으로 설정해야 합니다. 물론, 튜닝에 필요하지 않은 경우에는 일반적으로 이 매개변수를 활성화하지 않는 것이 좋습니다. 느린 로깅은 어느 정도 성능에 영향을 미치기 때문입니다.

활성화 여부와 set

#查看是否开启show variables like '%slow_query_log%';#开启set global slow_query_log = 1;

set global Slow_query_log=1을 사용하여 느린 쿼리 로그를 활성화하면 현재 데이터베이스에만 적용되며 MySQL을 다시 시작하면 무효화됩니다. 영구적으로 적용하려면 my.cnf 구성 파일을 수정해야 합니다.

느린 쿼리 임계 시간을 설정한 후에는 값 변경이 표시되지 않을 수 있습니다. 즉, 적용되지 않습니다. 이 경우 수정된 값을 보려면 다시 연결하거나 새 세션을 열어야 합니다.

show variables like '%long_query_time%'

또는 연결을 다시 열지 않고 다음 명령을 사용할 수 있습니다.

show variables like '%long_query_time%'

어떤 SQL이 느리게 기록되는지는 long_query_time에 의해 제어됩니다. 기본적으로 long_query_time의 값은 10초입니다. 시간이 long_query_time과 정확히 같으면 기록되지 않습니다. 즉, mysql에서는 long_query_time보다 크거나 같거나 크지 않은 것으로 판단한다.

다음 명령문을 사용하여 테스트할 수 있습니다.

show variables like '%long_query_time%';

long_query_time을 3초로 설정하면 이 명령문이 기록됩니다.

MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석느린 로그 수 보기

SELECT sleep(4)

로그 분석 도구 mysqldumpslow

프로덕션 환경에서 로그를 수동으로 분석하고 SQL을 찾고 분석하려는 경우 분명히 MySql이 로그 분석을 제공하는 것은 힘든 작업입니다. 도구 mysqldumpslow.

예:

show global status like '%slow_queries%'
#得到返回记录集最多的10个SQL
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到访问次数最多的10个SQL
Mysqldumpslow –s c –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到按照时间排序的前10条里面含有左连接的查询
Mysqldumpslow –s t –t 10 –g “left join” D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#另外建议在使用这些命令时结合|和more使用,否则可能出现爆破情况
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log|more

SQL 분석에 show profile 사용

show profile 명령은 현재 세션에서 명령문 실행의 리소스 소비를 분석할 수 있습니다. SQL의 시간 소모적인 병목 현상을 찾는 데 사용됩니다. 기본적으로 꺼져 있으며 최근 15번의 실행 결과를 저장합니다.

활성화되었는지 확인하세요('프로파일링'과 같은 변수 표시;)

기능을 활성화하세요(프로파일링 설정 = on;)


활성화한 후 후속 SQL 실행을 기록할 수 있습니다. 그런 다음 show profile을 사용하여 결과를 확인합니다.

MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석 명령을 통해 특정 SQL 문의 실행을 추가로 분석합니다(show profile cpu, block io for query 3;). 예를 들어 SQL No. 3의 상황을 분석합니다. 아래에. Show profile의 일부 매개 변수 :

모두 : 모든 오버 헤드 정보 표시 MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석

블록 IO : 디스플레이 블록 IO 관련 오버 헤드
  • 연결 텍스트 스위치 : 컨텍스트 스위칭 관련 오버 헤드 : CPU : CPU 관련 오버헤드 표시
  • Memory: 메모리 관련 오버헤드 표시
  • Source: source_function, source_file, source_line 관련 오버헤드 정보 표시
  • 글로벌 쿼리 로그
  • (프로덕션 환경에서는 절대 켜지 마세요. , 실행된 모든 SQL 문 보기)

    Set 명령:
  • 参数含义
    s: 表示按照何种方式排序
    c:访问次数
    l:锁定时间
    r:返回记录
    t:查询时间
    al:平均锁定时间
    t:返回前面多少条的数据
    g:后面搭配一个正则表达式
  • 이후 mysql에서 실행된 SQL 문은 mysql.genearl_log 테이블에 기록되며, 다음 명령으로 볼 수 있습니다.

    set global general_log = 1;#以表的形式输出set global log_output = ‘TABLE’

    또한 가능합니다. 구성 파일에 구성되어 다음과 같이 설정됩니다.
  • select * from mysql.general_log;

위 내용은 MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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