>  기사  >  데이터 베이스  >  MySQL 느린 쿼리 작업의 코드 요약

MySQL 느린 쿼리 작업의 코드 요약

黄舟
黄舟원래의
2017-03-24 13:36:111279검색

다음 편집기는 Mysql느린쿼리 작업에 대한 요약을 제공합니다. 에디터가 꽤 좋다고 생각해서 지금 공유해서 참고용으로 올려보겠습니다. 에디터를 따라가며 살펴보자

Mysql 느린 쿼리 설명

MySQL의 느린 쿼리 로그는 MySQL Logging에서 제공하는 타입이다. 는 MySQL에서 응답 시간이 임계값을 초과하는 명령문을 기록하는 데 사용되며, 구체적으로는 실행 시간이 long_query_time 값을 초과하는 SQL을 의미하며 이는 느린 쿼리 로그에 기록됩니다. long_query_time의 기본값은 10이며, 이는 10S 이상 동안 명령문을 실행한다는 의미입니다. 기본적으로 Mysql 데이터베이스는 느린 쿼리 로그를 시작하지 않습니다. 물론 이 매개변수를 수동으로 설정해야 합니다. 튜닝에 필요하지 않은 경우 일반적으로 이 매개변수를 시작하지 않는 것이 좋습니다. 느린 쿼리 로그는 어느 정도 성능에 영향을 미치게 됩니다. 느린 쿼리 로그는 파일에 로그 레코드 쓰기를 지원하고 데이터베이스 테이블에 로그 레코드 쓰기도 지원합니다. 느린 쿼리 로그는 너무 느린 일부 쿼리 문을 기록하는 데 사용되며 이는 관리자가 로그 기본값을 분석하는 데 도움이 될 수 있습니다. 활성화하려면 구성 파일 에 일련의 매개변수를 추가하여

Mysql 느린 쿼리를 켜는 이유

데이터베이스는 병목 현상이 쉽게 발생할 수 있는 곳입니다. 요즘 Nosql에 대한 이야기가 너무 많아서 다들 데이터베이스 때문에 우울해지실 텐데요. MySQL의 속도에 가장 큰 영향을 미치는 것은 매우 느린 쿼리문입니다. 이러한 느린 명령문은 무리하게 작성되거나 빅데이터 등 여러 테이블에 대한

공동 쿼리일 수 있으므로 이러한 명령문을 찾아야 합니다. 이유를 분석하고 최적화합니다. 이것이 이 블로그 글을 올리는 이유이기도 합니다

mysql 느린 쿼리 방법 활성화

1) 방법 1, mysql 데이터베이스 터미널에 로그인하고

mysql> show variables like "%long%";    
<SPAN style="COLOR: #ff00ff"> //查看一下默认为慢查询的时间10秒 </SPAN> 
+-----------------+-----------+  
| Variable_name  | Value   |  
+-----------------+-----------+  
| long_query_time | 10.000000 |  
+-----------------+-----------+  
1 row in set (0.00 sec)  
  
mysql> set global long_query_time=1;     
<SPAN style="COLOR: #ff00ff">//设置成1秒,加上global,下次进mysql已然生效</SPAN>  
Query OK, 0 rows affected (0.00 sec)  
 
mysql> show variables like "%slow%";     
<SPAN style="COLOR: #ff00ff"> //查看一下慢查询是不是已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | OFF               |  
| slow_launch_time  | 2                |  
| slow_query_log   | OFF               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)  
  
mysql> set slow_query_log=&#39;ON&#39;;          
<SPAN style="COLOR: #ff00ff"> //加上global,不然会报错的</SPAN> 
ERROR 1229 (HY000): Variable &#39;slow_query_log&#39; is a GLOBAL variable and should be set with SET GLOBAL 
mysql> set global slow_query_log=&#39;ON&#39;;      
<SPAN style="COLOR: #ff00ff">//这个参数设置为ON,表示启用慢查询,可以捕获执行时间超过一定数值的SQL语句。</SPAN> 
Query OK, 0 rows affected (0.28 sec)  
  
mysql> show variables like "%slow%";       
<SPAN style="COLOR: #ff00ff">//查看是否已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | ON               |  
| slow_launch_time  | 2                |  
| slow_query_log   | ON               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)

를 엽니다. 방법 2. mysql 구성 파일 my.cnf
[root@www ~]# vim /etc/mysql.cnf

[mysqld] 영역 구성에 다음 내용 추가

......

slow_query_log = 1
      
//开启慢查询日志,将1改为ON也可以
long_query_time = 1
      
//mysql慢查询时间,指定达到多少秒才算慢查询;这里推荐设置超过1秒的执行语句就会被记录到慢查询日志中
slow_query_log_file= /var/lib/mysql/mysql-slow.log
     
//慢查询日志路径。这里slow_query_log_file修改为log-slow-queries 也可以
//主要是上面三行内容,还可以添加下面几行细节性配置
long-queries-not-using-indexes
     
//记录没有使用索引的查询语句
min_examined_row_limit = 1000
    
 //记录查找了多达1000次而引起的慢查询
log-slow-admin-statements
     
  //记录ALTER TABLE等语句引发的慢查询
log-slow-slave-statements       
 //记录从服务器产生的慢查询


분석 도구
분석 도구는 실제로 mysql에 기록된 데이터를 분석한다- Slow.log 한 번에 표시됩니다(실제로 쉘 스크립트를 직접 작성하여 필요한 정보를 얻을 수도 있습니다).


[root@www ~]# cat mysql-slow.log                                                             ~           

실행 시간, 잠금 시간 등 실행 상태가 다르기 때문에 분석 도구 사용 여부는 개인에 따라 다릅니다. 많은 분석 도구가 있습니다. 여기서는 mysql의 느린 쿼리 분석 도구인 mysqldumpslow를 사용하는 방법에 대해서만 설명하겠습니다.

[root@www ~]# mysqldumpslow -h

/usr/local/mysql/libexec/mysqld, Version: 5.1.26-rc-log (Source distribution). started with:  
Tcp port: 3306 Unix socket: /tmp/mysql.sock  
Time         Id Command  Argument  
# Time: 100814 13:28:30  
# User@Host: root[root] @ localhost []  
# Query_time: 10.096500 Lock_time: 0.045791 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281763710;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:02  
# User@Host: root[root] @ localhost []  
# Query_time: 10.394134 Lock_time: 0.000091 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281764222;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:16  
# User@Host: root[root] @ localhost []  
# Query_time: 4.608920 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 1260544  
SET timestamp=1281764236;  
select count(*) as cou from ad_visit_history where ad_code in (select ad_code from ad_list where id=41) order by id desc;

예:

Option h requires an argument  
ERROR: bad option 
  
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  
  
Parse and summarize the MySQL slow query log. Options are  
  
 --verbose  verbose  
 --debug   debug  
 --help    write this text to standard output  
  
 -v      verbose  
 -d      debug     //查错  
 -s ORDER   what to sort by (t, at, l, al, r, ar etc), &#39;at&#39; is default   //排序方式query次数,时间,lock的时间和返回的记录数来排序  
 -r      reverse the sort order (largest last instead of first)    //倒排序  
 -t NUM    just show the top n queries                    //显示前N多个  
 -a      don&#39;t abstract all numbers to N and strings to &#39;S&#39; 
 -n NUM    abstract numbers with at least n digits within names  //抽象的数字,至 少有n位内的名称 
 -g PATTERN  grep: only consider stmts that include this string   //配置模式 
 -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),   //mysql所以机器名或者IP 
 default is &#39;*&#39;, i.e. match all 
 -i NAME   name of server instance (if using mysql.server startup script) 
 -l      don&#39;t subtract lock time from total time      //总时间中不减去锁定时间

위 내용은 MySQL 느린 쿼리 작업의 코드 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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