Mysql定位慢查询

Posted by 撒得一地 on 2015年10月28日 in Mysql优化

在项目开发中,有时候一条sql语句,就可能降低整体查询效率。所以sql语句优化是十分必要的。首先我们先了解下mysql数据库的一些运行状态查询,比如我想知道当前mysql运行的时间与及一共执行了多少次select、update语句等。

一般语法是:

show [session|global] status like .... 

如果你不写 [session|global] 默认是session 会话,只取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该 选择global选项)

常用的一些状态查询语句有:

//查看mysql从启动到当前的时间
show status like 'uptime';

//查看mysql一共执行了多少次select语句
show status like 'com_select'

//查看mysql一共执行了多少次insert语句
show status like 'com_insert'

//查看mysql一共执行了多少次update语句
show status like 'com_update'

//查看mysql一共执行了多少次delete语句
show status like 'com_delete'

//查看mysql连接服务器的次数
show status like 'connections'; 

那么如何查看mysql设定的慢查询时间、mysql一共产生了多少次慢查询记录与及设定mysql慢查询时间。一般操作方法如下:

//显示慢查询次数
mysql> show status like 'slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  |  0    |
+---------------+-------+
1 row in set (0.00 sec)

//查询mysql慢查询时间
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

从上面可以看到,mysql默认的慢查询时间是10秒。那么如何设定慢查询时间?

//可以修改慢查询时间  只在当前窗口打开的期间有效 窗口关闭后立即失效
set long_query_time=1 ;

//设置永久生效时间 但要在下次重新登录后才开始生效
set global long_query_time = 1; 

了解了上面的一些语句后,我们来看看如何查询mysql是否开启了慢查询记录。常用的方法如下:

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/data/slow.log |
+---------------------+------------+
4 rows in set (0.01 sec)

通过命令查询,如果log_slow_queries和slow_query_log都为OFF,则说明mysql没有开启慢查询记录。
那么mysql下如何开启慢查询记录?一般有下面两种方法:

方法一:
开启慢查询日志,没设置global时会提示错误,如下:

mysql> set slow_query_log = 'ON';
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.08 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/data/slow.log |
+---------------------+-----------------------------------+
4 rows in set (0.00 sec)

方法二:
直接修改mysql配置文件,在[mysqld]里面加上下面内容:

long_query_time = 2  //设置慢查询时间为2s

log-slow-queries = /usr/data/slow.log  

然后重启mysql:service mysqld restart

如何修改mysql慢查询日志文件的存放地址,方法如下:

mysql> set global slow_query_log_file = "/usr/data/psz-slow.log";

Query OK, 0 rows affected (0.01 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/data/psz-slow.log |
+---------------------+---------------+
4 rows in set (0.00 sec)
说明修改成功

了解上面的用法后,下面测试慢查询:

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|  0       |
+----------+
1 row in set (2.07 sec)

然后用cat命令查看/usr/data/slow.log日志。也可以用mysql自带的慢查询分析工具mysqldumpslow来对数据进行分析。

欢迎转载,转载请注明:http://coderschool.cn/888.html

标签:,

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.