`
walksing
  • 浏览: 211849 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转)linux下开启mysql慢查询,分析查询语句一,为什么要开启这个查询呢?

阅读更多
linux下开启mysql慢查询,分析查询语句一,为什么要开启这个查询呢?

数据库是很容易产生瓶颈的地方,现在Nosql大家讨论这么热,估计都被数据库搞郁闷了。mysql中最影响速度的就是那些查询非常慢的语句,这些慢的语句,可能是写的不够合理或者是大数据下多表的联合查询等等,所以我们要找出这些语句,分析原因,加以优化。这也是发这篇博文的原因

二,开启mysql的慢查询

方法1,用命令开启慢查询

查看复制打印?
1.mysql> show variables like "%long%";         //查看一下默认为慢查询的时间10秒  
2.+-----------------+-----------+  
3.| Variable_name   | Value     |  
4.+-----------------+-----------+  
5.| long_query_time | 10.000000 |  
6.+-----------------+-----------+  
7.1 row in set (0.00 sec)  
8. 
9.mysql> set global long_query_time=2;          //设置成2秒,加上global,下次进mysql已然生效  
10.Query OK, 0 rows affected (0.00 sec)  
11. 
12.mysql> show variables like "%slow%";          //查看一下慢查询是不是已经开启  
13.+---------------------+---------------------------------+  
14.| Variable_name       | Value                           |  
15.+---------------------+---------------------------------+  
16.| log_slow_queries    | OFF                             |  
17.| slow_launch_time    | 2                               |  
18.| slow_query_log      | OFF                             |  
19.| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
20.+---------------------+---------------------------------+  
21.4 rows in set (0.00 sec)  
22. 
23.mysql> set slow_query_log='ON';                        //加上global,不然会报错的。  
24.ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL  
25.mysql> set global slow_query_log='ON';            //启用慢查询  
26.Query OK, 0 rows affected (0.28 sec)  
27. 
28.mysql> show variables like "%slow%";              //查看是否已经开启  
29.+---------------------+---------------------------------+  
30.| Variable_name       | Value                           |  
31.+---------------------+---------------------------------+  
32.| log_slow_queries    | ON                              |  
33.| slow_launch_time    | 2                               |  
34.| slow_query_log      | ON                              |  
35.| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
36.+---------------------+---------------------------------+  
37.4 rows in set (0.00 sec) 
mysql> show variables like "%long%";         //查看一下默认为慢查询的时间10秒
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

mysql> set global long_query_time=2;          //设置成2秒,加上global,下次进mysql已然生效
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "%slow%";          //查看一下慢查询是不是已经开启
+---------------------+---------------------------------+
| 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='ON';                        //加上global,不然会报错的。
ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL
mysql> set global slow_query_log='ON';            //启用慢查询
Query OK, 0 rows affected (0.28 sec)

mysql> show variables like "%slow%";              //查看是否已经开启
+---------------------+---------------------------------+
| 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

在[mysqld]里面加上以下内容

1.long_query_time = 2  
2.log-slow-queries = /usr/local/mysql/mysql-slow.log 
long_query_time = 2
log-slow-queries = /usr/local/mysql/mysql-slow.log
重起一下
/usr/local/mysql/libexec/mysqld restart

三,分析工具

分析工具干什么事的呢,其实就是把mysql-slow.log里面记录下来的数据,分析一下显示出来。其实自己写一个shell脚本也是可以把要的信息取出来的。我们来看一下mysql-slow.log里面到底是什么东西

查看复制打印?
1.[root@BlackGhost mysql]# cat mysql-slow.log     //查看命令  
2./usr/local/mysql/libexec/mysqld, Version: 5.1.26-rc-log (Source distribution). started with:  
3.Tcp port: 3306  Unix socket: /tmp/mysql.sock  
4.Time                 Id Command    Argument  
5.# Time: 100814 13:28:30  
6.# User@Host: root[root] @ localhost []  
7.# Query_time: 10.096500  Lock_time: 0.045791 Rows_sent: 1  Rows_examined: 2374192  
8.SET timestamp=1281763710;  
9.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);  
10.# Time: 100814 13:37:02  
11.# User@Host: root[root] @ localhost []  
12.# Query_time: 10.394134  Lock_time: 0.000091 Rows_sent: 1  Rows_examined: 2374192  
13.SET timestamp=1281764222;  
14.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);  
15.# Time: 100814 13:37:16  
16.# User@Host: root[root] @ localhost []  
17.# Query_time: 4.608920  Lock_time: 0.000078 Rows_sent: 1  Rows_examined: 1260544  
18.SET timestamp=1281764236;  
19.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; 
[root@BlackGhost mysql]# cat mysql-slow.log     //查看命令
/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;
看到了,就是记录一下sql语句的执行情况,包括执行时间,锁定时间等,所以要不要分析工具看个人情况,分析工具很多,在这儿只说一下mysql自带的慢查询分析工具mysqldumpslow的使用方法。

查看复制打印?
1.[root@BlackGhost bin]# mysqldumpslow -h  
2.Option h requires an argument  
3.ERROR: bad option  
4. 
5.Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  
6. 
7.Parse and summarize the MySQL slow query log. Options are  
8. 
9. --verbose    verbose  
10. --debug      debug  
11. --help       write this text to standard output  
12. 
13. -v           verbose  
14. -d           debug          //查错  
15. -s ORDER     what to sort by (t, at, l, al, r, ar etc), 'at' is default     //排序方式query次数,时间,lock的时间和返回的记录数来排序  
16. -r           reverse the sort order (largest last instead of first)       //倒排序  
17. -t NUM       just show the top n queries                                       //显示前N多个  
18. -a           don't abstract all numbers to N and strings to 'S' 
19. -n NUM       abstract numbers with at least n digits within names   //抽象的数字,至 少有n位内的名称 
20. -g PATTERN   grep: only consider stmts that include this string      //配置模式 
21. -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),     //mysql所以机器名或者IP 
22. default is '*', i.e. match all 
23. -i NAME      name of server instance (if using mysql.server startup script) 
24. -l           don't subtract lock time from total time           //总时间中不减去锁定时间 
[root@BlackGhost bin]# mysqldumpslow -h
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), 'at' 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't abstract all numbers to N and strings to 'S'
-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 '*', i.e. match all
-i NAME      name of server instance (if using mysql.server startup script)
-l           don't subtract lock time from total time           //总时间中不减去锁定时间
例子:

[root@BlackGhost bin]# ./mysqldumpslow -s r -t 20 /usr/local/mysql/mysql-slow.log

[root@BlackGhost bin]# ./mysqldumpslow -s r -t 20 -g ‘count’ /usr/local/mysql/mysql-slow.log

收藏、分享这篇文章!

转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/mysql/972.html
分享到:
评论

相关推荐

    Mysql开启慢查询

    MySQL慢查询配置  1. 慢查询有什么用?  它能记录下所有执行超过long_query_time...  Linux下找到mysql的配置文件my.ini, 在mysqld下方加入慢查询的配置语句(注意:一定要在[mysqld]下的下方加入)  log-slow-q

    mysql 开启慢查询 如何打开mysql的慢查询日志记录

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢?其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,...

    MySQL开启慢查询日志功能的方法

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句,这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或...

    MySQL开启慢查询方法及实例

    开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。 二、参数说明 slow_query_log 慢查询开启状态 slow_query_log_file 慢查询日志存放的位置...

    深入mysql慢查询设置的详解

    在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的...要开启这个功能,我们需要修改MySQL的配置文件,windows下修改my.ini,Linux下修改my.cnf文件,在[mysqld]最后增加如下命令: 代码如下:slow_qu

    Mysql开启慢SQL并分析原因

    开启mysql慢查询 方式一:修改配置文件 Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下。 Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下 在 my.ini 增加几行: [mysqlld]...

    MYSQL常用命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql> insert into MyClass values(1,'Tom',96.45),(2,...

    根据mysql慢日志监控SQL语句执行效率

    在Linux环境下先要找到my.cnf文件(一般在/etc/mysql/),然后可能会发现该文件修改后无法保存,原因是你没有相应的权限,可以从属性中看到该文件的所有者是root,这时要先以root的身份打开它: sudo nautilus /etc/...

    MySQL 5.1中文手冊

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    MySql 5.1 参考手册.chm

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    MySQL 5.1参考手册

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    MySQL 5.1参考手册中文版

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作...

    MySQL 5.1官方简体中文参考手册

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    MySQL 5.1参考手册 (中文版)

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    MYSQL中文手册

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何...

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql>insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    mysql官方中文参考手册

    5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...

    mysql binlog日志恢复【亲测有效,有例子实测】

    不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。 需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog。 binlog有两个...

Global site tag (gtag.js) - Google Analytics