Mysql定位慢查询
下一篇: Centos中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
下一篇: Centos中Mysql创建多个数据库实例并相互转换