前言

本篇主要总结一下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性能调优的内容涉及面很广,后续文章中依次展开分析。

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

MySQL调优系列_日志分析的更多相关文章

  1. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  2. MYSQL 调优系列

    http://www.cnblogs.com/digdeep/p/4847484.html

  3. IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象

    硬广:<IOS性能调优系列>第四篇,预计会有二十多篇,持续更新,欢迎关注. 前两篇<IOS性能调优系列:Analyze静态分析>.<IOS性能调优系列:使用Instrum ...

  4. MySQL调优 优化需要考虑哪些方面

    MySQL调优 优化需要考虑哪些方面   优化目标与方向定位 总体目标:使得响应时间更快,吞吐量更大. (throughout --- 吞吐量:单位时间内处理事务的数量) 如何找到需要优化的地方 使用 ...

  5. SQL Server性能调优系列

    这是关于SQL Server调优系列文章,以下内容基本涵盖我们日常中所写的查询运算的分解以及调优内容项,皆为原创........ 第一个基础模块注重基础内容的掌握,共分7篇文章完成,内容涵盖一系列基础 ...

  6. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

  7. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  8. SQL Server调优系列基础篇

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  9. SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

    前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...

随机推荐

  1. 【Debug】Web开发中,Tomcat正常启动,访问欢迎页404,怎么办?

    访问页面出现404是一个会经常遇到的问题.每次开发Web项目时总要掉这个坑里几次,而且还不长记性.今天来总结一下,开发时遇到这个问题的解决思路. 1. 查看访问地址是否正确,有无拼写错误. 越是低级的 ...

  2. 写出好的 commit message

    为何要关注提交信息 加快Reviewing Code的过程 帮助我们写好release note 5年后帮你快速想起来某个分支,tag或者 commit增加了什么功能,改变了哪些代码 让其他的开发者在 ...

  3. 使用toggle()方法进行显示隐藏

    这是一个示例: <html> <head> <script type="text/javascript" src="http://keley ...

  4. [WCF编程]12.事务:事务协议与管理器

    一.事务协议 总体来说,WCF开发人员不需要涉及事务协议与管理器.我们应该依赖WCF来选择相应的事务协议和管理器,重点关注业务逻辑的实现. WCF是根据事务范围里的参与个体来选择事务管理协议的.事务管 ...

  5. 基于CkEditor实现.net在线开发之路(1)

    我以前的公司使用office sharepoint designer为界面设计器,嵌套各种自定义控件,进行各种管理软件,工作流的开发,遇到比较复杂的逻辑,则采用本地写类库,生成DLL上传到服务器,通过 ...

  6. CSS之深入探究Position

    这些天重新整理以前的代码,想对其进行优化,却出现了很多问题,其中一个就是Position,中间自己停下优化代码的工作,特意停下来深入研究了一下Position.现在来分享一下自己的体会吧! 首先我们从 ...

  7. 转载:《TypeScript 中文入门教程》 3、接口

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript的核心原则之一是对值所具有的shape进行类型检查. 它有时 ...

  8. gson笔记 解析json数据

    gson中负责json数据解析的类是JsonReader. Json格式有两种结构,一种是对象(键值对的组合,无序),另外一种是数组(值的有序集合). 因此针对这两种格式,JsonReader提供了不 ...

  9. POJ-3041

    思路:将n个行看作n个点{x_i}(i=1, ..., n),n个列也看作n个点{y_j}(j=1, ..., n).每个障碍看作一条无向边(x_i, y_j).则该问题能够归结为求二分图最小点覆盖数 ...

  10. BaseAdapter的抽取

    为了更方便高效的使用BaseAdapter,特意抽取了一下,下面是简单的结构图: 需要4个类: [MyBaseAdapter3]: public abstract class MyBaseAdapte ...