mysql查询慢日志与相关运用!

慢查询日志概念:

         MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

查看慢日志命令:SHOW VARIABLES LIKE '%quer%';

     这里我们记住重要的几条就可以了

long_query_time     :  设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s 
slow_query_log      :  指定是否开启慢查询日志 
log_slow_queries    :  指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留) 
slow_query_log_file :  指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log 
log_queries_not_using_indexes: 不使用索引的慢查询日志是否记录到索引

慢日志默认是关闭的,开启慢日志:SET GLOBAL slow_query_log=ON;   再来查看

设置sql的慢日志记录时时间,我们默认的时间是10s,这里我们设置为1s:SET GLOBAL long_query_time=1;

      这里我们会发现值并没有变,这里我们需要重新连接一下数据库才行。应为这样设置的只能用于当前数据库还没重启后关闭时。如果你重启了数据库。当前设置会还原的。当然你也可以直接修改配置文件。让它永久生效。这里我们只做演示,就不修改配置文件了。用客户端重新连接再来看

接下来我们具体看看使用慢日志的好处,我这里有一张user表,里面有830208条数据。我们来制造一些慢日志。

这里我通过username倒序查询,可以看到花费了6.027秒。

这个时间已经超过了我们慢日志记录的时间了。我们设置的是sql超过1s就记录sql。我们去看看慢日志记录的文件里面是否有记录。

我的路径是在:C:\ProgramData\MySQL\MySQL Server 5.1\Data\7MPG90BLM277BYQ-xly-slow.log 。根据这个目录去找就可以啦。注意C:\ProgramData目录是隐藏文件哦!

再7MPG90BLM277BYQ-xly-slow.log文件中的最后一行可以看到刚才查询的sql 。实际花费的时间为9秒多。比我们执行时看到的还有久一点。

      这就是我们使用慢日志的好处。可以记录我们查询时间较长的sql。方便我们优化。

接下来我们对这条语句进行优化,怎么优化呢?我们可以加入索引。当让所有有很多种。我们就默认username字段没重复。这里我设置为唯一索引。

    加上索引后我们再来查询看看

只花费了1s多点。我们再看看慢日志。也是1s多。大大提升了我们sql的查询性能。

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考。本篇主要将慢查询日志的开启,日志分析,这也是优化SQL程序的一般步骤中至关重要的一步。

猜你喜欢

转载自blog.csdn.net/xu12387/article/details/87696881