zoukankan      html  css  js  c++  java
  • MySQL调优系列_日志分析

     前言

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

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

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

    技术准备

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

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

    一、错误日志

    我记得在写SQL Server的时候,我写过一篇关于SQL Server启动过程中的一些错误日志记录,可以点击此进行查看。同样,在MySQL数据库运行过程中,也有自己的数据库错误日志。

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

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

    show variables like 'log_error';

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

    more /var/log/mysql/error.log

    当然,上述命令在linux平台下,一般用于修改文件,但是也可以作为查看文件来用。

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

    在上面的日志文件中可以看到,有一条提示是IP地址的域名解析问题,所以可以通过该文件来记录登录信息等。

    二、慢查询日志

    所谓的慢查询日志就是用来记录在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性能调优的内容涉及面很广,后续文章中依次展开分析。

    如果您看了本篇博客,觉得对您有所收获,请不要吝啬您的“推荐”。

  • 相关阅读:
    ASP.Net中实现XMl的标识列(ID列)或自增长列
    ASP.Net 更新储存在xml文件中的数据(update操作)
    系统分析师(1)网站介绍
    ASP.Net 删除xml文件中的数据(delete操作)
    DataGrid利用imagebutton实现更新操作
    DataGrid利用imagebutton实现删除操作
    JavaScript总结(1)Asp.Net 中利用JavaScript实现客户端验证
    sql server 2005 压缩实例下所有数据库文件及日志文件(转载)作者:Program Life
    Spreadsheet 对象
    多参数sp_executesql
  • 原文地址:https://www.cnblogs.com/zhijianliutang/p/5057196.html
Copyright © 2011-2022 走看看