MySQL调优系列_日志分析

 前言html

本篇主要总结一下MySQL数据库的几种日志,用于平常维护过程当中问题解决和性能优化等,稍显基础,平常积累之用。mysql

文章的部份内容会将MySQL数据库和SQL Server数据库部份内容作一个对比,非抨击孰优孰劣,只叙述技术,权作学习之用。linux

闲言少叙,直接进入本篇的正题。sql

技术准备数据库

宿主于Ubuntu14.04.2平台下,基于MYSQL5.5.46版本。性能优化

日志文件记录了MySQL数据库的各类类型的活动,做为平常定位问题的最经常使用的一种分析手段,Mysql数据库中经常使用的日志文件分为如下几类:错误日志、二进制日志、慢查询日志,查询日志。性能

1、错误日志学习

我记得在写SQL Server的时候,我写过一篇关于SQL Server启动过程当中的一些错误日志记录,能够点击此进行查看。一样,在MySQL数据库运行过程当中,也有本身的数据库错误日志。优化

该日志记录了MySQL运行过程当中启动、运行、关闭过程当中的一些详细记录,在一旦出现问题的时候,能够先查看该日志,该日志不但记录了出错信息,一样也记录了一些警告,固然也有一些运行信息。spa

能够经过以下命令,来查看错误日志的文件路径:

show variables like 'log_error';

经过上面的命令定位到错误日志的文件,若是出问题,能够在相应的Server上来查看该日志明细,查看方式以下:

more /var/log/mysql/error.log

固然,上述命令在linux平台下,通常用于修改文件,可是也能够做为查看文件来用。

而且,在合适的条件下,MySQL会自动归档这些错误日志,用于后期问题的查找。

在上面的日志文件中能够看到,有一条提示是IP地址的域名解析问题,因此能够经过该文件来记录登陆信息等。

 

2、慢查询日志

所谓的慢查询日志就是用来记录在MySQL中运行速度缓慢的执行语句,因此说这个文件很方便总体的性能调优,咱们知道在SQL Server中只能经过相应的DMV来查找。

固然,什么样的语句才能称为慢的语句呢,因此这里就须要有一个阀值来定义,一旦运行时间超过了这个值就会被记录到这个慢查询日志中。

咱们来看一下该阀值的设置方式,能够经过long_query_time来设置,默认值为10,意思是运行10S以上的语句。

默认状况下,Mysql数据库并不启动慢查询日志,须要咱们手动来设置这个参数,固然,若是不是调优须要的话,通常不建议启动该参数,由于存在必定的性能影响。

来看,设置方式

show variables like '%long%';

show variables like 'log_slow_queries'

咱们来开启这个慢查询语句。

SET global slow_query_log=1
SHOW variables like  '%query_log%';

固然,咱们能够将默认的时间阀值调小,方法以下

SET global long_query_time=0.1;

验证的时候,这里有点小技巧的,须要新开一个窗口进行查询,当前窗口的查找是没有生效的,不知道算不算Mysql的一个小Bug.咱们新开一个窗口验证下:

是否是很爽?咱们来来个语句验证下,看看效果咋样。

为了方便演示,我将这个阀值设置成0.001S,挺小的一个值,咱们来找个语句试验一下:

咱们来执行以下脚本:

select * from tables;

咱们来看一下慢查询日志是否已经记录下来:

 sudo more  /var/lib/mysql/wu-virtual-Ubuntu01-slow.log

这里的日志查看,须要提权操做。

你们能够看到,当前已经将咱们查询的语句输出到日志当中去,固然,其它的一些语句也被记录下来。

而且,详细的记录执行时间,执行用户,运行时间,lock时间,返回行等基础信息。

固然,这里有不少同窗看到这里就来需求了,通常咱们运行的时候,对Server进行监控的时候,难道让我一台台机器上去看文件,我想搞一个监控系统,须要监控每台的Slow 日志文件,而且解析起来很不爽。

为了解决这个问题,MySQL贴心的为咱们提供了一张系统的表进行查看,这就方便咱们操做了,好比我想看看最慢的前10条语句......

这里须要提示一下,这个方法只创建在MySQL 5..1之上,过程以下:

首先,咱们来看一下默认的输出方式,脚本以下:

 show variables like 'log_output';

能够看到,这里默认的输出方式是FILE,文件,咱们将这里改为Table。

set global log_output='TABLE';

select sleep(10);
 select * from mysql.slow_log;

是否是很贴心....你能够经过T-SQL语句进行各类查了。

在咱们进行数据库优化的时候,不少的时候是经过建立合适的索引,进行优化,因此说,若是咱们知道一个数据库中那些语句没有应用到索引,或者说是全表扫描的话,是很方便易于咱们进行优化的。

因此,在Mysql的慢日志当中,为咱们有贴心的添加了一个参数,用来记录没有使用索引的语句;

 show variables like 'log_queries_not_using_indexes';

默认是关闭的,咱们能够将该参数打开,进行详细的记录;

SET global log_queries_not_using_indexes=1

 

经过此参数的设置,就能够跟踪MySQL中没有使用索引而且运行时间比较长的语句了,下面的优化你们就懂了。

篇幅稍长了,这里就不跟你们演示了。

结语

此篇文章先到此吧,关于MYSQL性能调优的内容涉及面很广,后续文章中依次展开分析。

 

若是您看了本篇博客,以为对您有所收获,请不要吝啬您的“推荐”。

相关文章
相关标签/搜索