Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70226
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-09 17:02
个人简介

专注

文章分类

全部博文(21)

文章存档

2015年(21)

我的朋友

分类: Mysql/postgreSQL

2015-08-16 10:13:31

数据库优 化的信息,而慢查询日志(slow log)可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设一个阈值,将运行时间超过该值的所有 SQL语句都记录到慢查询日志文件中。DBA每天或每过一段时间对其进行检查,确认是否有SQL语句需要进行优化。该阈值可以通过参数 long_query_time来设置,默认值为10,代表10秒。

在默认情况下,MySQL数据库并不启动慢查询日志,用户需要手工将这个参数设为ON:

mysql> SHOW VARIABLES LIKE 'long_query_time'\G;

*************************** 1. row ***************************

Variable_name: long_query_time

       Value: 10.000000

1 row in set (0.00 sec)

 

mysql> SHOW VARIABLES LIKE 'log_slow_queries'\G;

*************************** 1. row ***************************

Variable_name: log_slow_queries

       Value: ON

1 row in set (0.00 sec)

这里有两点需要注意。首先,设置long_query_time这个阈值后,MySQL数据库会记录运行时间超过该值的所有SQL语句,但运行时间 正好等于long_query_time的情况并不会被记录下。也就是说,在源代码中判断的是大于long_query_time,而非大于等于。其次, 从MySQL 5.1开始,long_query_time开始以微秒记录SQL语句运行的时间,之前仅用秒为单位记录。而这样可以更精确地记录SQL的运行时间,供 DBA分析。对DBA来说,一条SQL语句运行0.5秒和0.05秒是非常不同的,前者可能已经进行了表扫,后面可能是进行了索引。

二、
另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。首先确认打开了log_queries_not_using_indexes:

mysql> SHOW VARIABLES LIKE 'log_queries_not_using_indexes'\G;

*************************** 1. row ***************************

Variable_name: log_queries_not_using_indexes

       Value: ON

1 row in set (0.00 sec)
log_throttle_queries_not_using_indexes===>(官方)
If log_queries_not_using_indexes is enabled, the log_throttle_queries_not_using_indexes variable limits the number of such queries per minute that can be written to the slow query log. A value of 0 (the default) means no limit. For more information, see Section 5.2.5, “The Slow Query Log”.
MySQL 5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加,故DBA可通过此参数进行配置。

DBA可以通过慢查询日志来找出有问题的SQL语句,对其进行优化。然而随着MySQL数据库服务器运行时间的增加,可能会有越来越多的SQL查询 被记录到了慢查询日志文件中,此时要分析该文件就显得不是那么简单和直观的了。而这时MySQL数据库提供的mysqldumpslow命令,可以很好地 帮助DBA解决该问题:

[root@localhost data]# mysqldumpslow  slow.log

Reading mysql slow query log from slow.log
Count: 1  Time=2.01s (2s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select sleep(N)

Count: 1  Time=0.51s (0s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select sleep(N.N)


阅读(553) | 评论(0) | 转发(0) |
0

上一篇:深入mysql慢查询设置的详解

下一篇:没有了

给主人留下些什么吧!~~