阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL调优系列_日志分析

189次阅读
没有评论

共计 2245 个字符,预计需要花费 6 分钟才能阅读完成。

技术准备

宿主于 Ubuntu 14.04.2 平台下,基于 MySQL5.5.46 版本。

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

一、错误日志

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

可以通过如下命令,来查看错误日志的文件路径:

show variables like 'log_error';

MySQL 调优系列_日志分析

通过上面的命令定位到错误日志的文件,如果出问题,可以在相应的 Server 上来查看该日志明细。

二、慢查询日志

慢查询日志是将 mysql 服务器中影响数据库性能的相关 SQL 语句记录到日志文件,通过对这些特殊的 SQL 语句分析,改进以达到提高数据库性能的目的。默认情况下,Mysql 数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为存在一定的性能影响。

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

我们来看一下该阀值的设置方式,可以通过 long_query_time 来设置,默认值为 10s。

默认情况下,Mysql 数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为存在一定的性能影响。

来看,设置方式

show variables like '%long%';

MySQL 调优系列_日志分析

show variables like 'log_slow_queries'

MySQL 调优系列_日志分析

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

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

MySQL 调优系列_日志分析

当然,我们可以将默认的时间阀值调小,方法如下

SET global long_query_time=0.1;

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

MySQL 调优系列_日志分析

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

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

MySQL 调优系列_日志分析

我们来执行如下脚本:

select * from tables;

MySQL 调优系列_日志分析

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

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

这里的日志查看,需要提权操作。

MySQL 调优系列_日志分析

大家可以看到,当前已经将我们查询的语句输出到日志当中去,当然,其它的一些语句也被记录下来。

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

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

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

这里需要提示一下,这个方法只建立在 MySQL 5.1 之上,过程如下:

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

show variables like 'log_output';

MySQL 调优系列_日志分析

可以看到,这里默认的输出方式是 FILE, 文件,我们将这里改成 Table。

set global log_output='TABLE';

MySQL 调优系列_日志分析

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

MySQL 调优系列_日志分析

是不是很贴心 …. 你可以通过 T -SQL 语句进行各种查了。

在我们进行数据库优化的时候,很多的时候是通过创建合适的索引,进行优化,所以说,如果我们知道一个数据库中那些语句没有应用到索引,或者说是全表扫描的话,是很方便易于我们进行优化的。

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

show variables like 'log_queries_not_using_indexes';

MySQL 调优系列_日志分析

默认是关闭的,我们可以将该参数打开,进行详细的记录;

SET global log_queries_not_using_indexes=1

MySQL 调优系列_日志分析

通过此参数的设置,就可以跟踪 MySQL 中没有使用索引并且运行时间比较长的语句了,下面的优化大家就懂了。

三、慢查询日志参数:

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140158.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2245字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中