집 >데이터 베이스 >MySQL 튜토리얼 >MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석
MySQL의 느린 로그 쿼리는 MySQL에서 제공하는 로그 기록입니다. SQL에서 특정 실행 시간이 long_query_time 값을 초과하는 문을 기록합니다. . long_query_time의 기본 시간은 10입니다. 이는 10개 이상의 문을 실행한다는 의미입니다.
예를 들어 SQL이 5초 이상 실행되면 SQL이 느린 것으로 간주하므로 MySQL은 5초 이상 SQL을 기록하여 종합적인 분석을 할 수 있습니다.
기본적으로 MySQL 데이터베이스는 느린 쿼리 로그를 활성화하지 않으므로 이 매개변수를 수동으로 설정해야 합니다. 물론, 튜닝에 필요하지 않은 경우에는 일반적으로 이 매개변수를 활성화하지 않는 것이 좋습니다. 느린 로깅은 어느 정도 성능에 영향을 미치기 때문입니다.
#查看是否开启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초로 설정하면 이 명령문이 기록됩니다.
느린 로그 수 보기
SELECT sleep(4)
로그 분석 도구 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 사용
활성화되었는지 확인하세요('프로파일링'과 같은 변수 표시;)
기능을 활성화하세요(프로파일링 설정 = on;)
활성화한 후 후속 SQL 실행을 기록할 수 있습니다. 그런 다음 show profile을 사용하여 결과를 확인합니다.
명령을 통해 특정 SQL 문의 실행을 추가로 분석합니다(show profile cpu, block io for query 3;). 예를 들어 SQL No. 3의 상황을 분석합니다. 아래에. Show profile의 일부 매개 변수 :
모두 : 모든 오버 헤드 정보 표시
블록 IO : 디스플레이 블록 IO 관련 오버 헤드参数含义 s: 表示按照何种方式排序 c:访问次数 l:锁定时间 r:返回记录 t:查询时间 al:平均锁定时间 t:返回前面多少条的数据 g:后面搭配一个正则表达式
set global general_log = 1;#以表的形式输出set global log_output = ‘TABLE’또한 가능합니다. 구성 파일에 구성되어 다음과 같이 설정됩니다.
select * from mysql.general_log;
위 내용은 MySQL을 사용하여 SQL 시간이 많이 소요되는 문제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!