2016-04-26 129 views
1

分析日志是一个主要问题。如果你有一个遗留的代码,并且有数以百计的查询在运行,你一定会被改进的东西和改进的地方以及需要改进的地方所困惑,因为在你要付出多少努力之间总会有一个平衡点。在一定的优化问题上。如何分析MySQL慢速查询日志或MySQL常规查询日志?

那么第一步就是分析我们要出错的地方。这只能通过正确分析日志来实现。没有这个,你可能不知道你的应用程序到底出了什么问题。

那你如何分析MySQL日志呢?

回答

0

使用关键字搜索,即表名称或列名称。

在使用您的移动应用程序或Web应用程序或桌面应用程序时,您会知道哪些页面的加载时间超过预期时间。多次,加载时间受到在后台运行的查询的影响。但是,只有当我们进行同步调用而不是异步调用才能获取数据时。因此,当您知道正在缓慢加载的页面/区域时,您将获得加载时在该页面上运行的查询列表以及由于您在该页面上执行操作而触发的查询列表。一旦你知道这些查询,你就会知道正在使用的表和正在提取的列。

现在,如果您正在搜索缓慢的查询日志,并且已经为自己设置了非常高的标准,并将缓慢的查询时间设置为400毫秒,则有可能会加载缓慢的查询日志,除非您是天才。所以,我们做这样简单的事:

grep 'table_name' /var/lib/mysql/mysql-slow.log 

这会造成更多的问题比它解决的,因为所有的重要问题仍然悬而未决,因为这不会给查询时间,查询日期等,所以,这样做:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log 

-B x给你x查询前的行数。

我们需要这样做,因为实际查询之前的3行包含有关查询执行的所有信息 - 执行查询的时间以及需要多少时间!

另一种:

grep -A 3 'query_user' /var/lib/mysql/mysql-slow.log 

白天慢查询数,小时明智

grep Time mysql-slow.log | cut -d: -f1,2 | sort -r | uniq -c 

这里的提示:您可以使用排序-u也可以使用排序| uniq -c,但要确保uniq不会独立工作,只有在你用管道排序时才能工作。排序应该在uniq之前完成。

使用mysqldumpslow分析日志

获得前10名表现不佳的查询。

mysqldumpslow -u root -p -s c -t 10 

如果您需要进入详细的日志分析,你应该建立麋鹿堆栈你的机器上和你的mysql连接到日志分析的设置。或者,您可以使用NewRelic分析MySQL日志。

+1

对于'mysqldumpslow',我更喜欢'-s t',以便通过“影响系统”来排序。如果索引很少,索引很差的查询可能不重要。 –

+0

@RickJames - ELK是分析MySQL日志的可行选项吗? – MontyPython

+1

对不起,我不知道ELK。我已经处理了数百台服务器上的缓慢日志,并发现在mysqldumpslow -s -t或pt-query-digest显示的前几个查询中,_usually_有用的信息。让我看看第一对查询(加上'CREATE TABLE'和'EXPLAIN'),我可以提供重要的建议。 –

2

一个选项:Percona的工具包

变慢日志的一些巨大的分析,几个月前..

而且我发现Percona Toolkit是非常有用的。使用此工具包,您可以轻松地对您的慢日志进行彻底分析,并以较少的麻烦进行数据库优化。

举几个有用的功能分析SLOW日志:

pt-query-digest

可从MySQL慢,一般情况下,和二进制日志分析查询。 (二进制日志必须首先转换为文本,请参阅--type)。它也可以使用来自tcpdump的SHOW PROCESSLIST和MySQL协议数据。默认情况下,该工具报告哪些查询是最慢的,因此是最重要的优化。通过使用诸如--group-by,--filter和--embedded-attributes之类的选项可以创建更复杂和定制的报告。

用法举例pt-query-digest slow.log

pt-index-usage

阅读从日志查询和分析他们是如何使用索引。

For more information...

Installation

好了,不是每个人都可以利用这个工具,但如果你能,这应该是非常有帮助的。

+1

ELK是MySQL的选项吗? – MontyPython

+1

我这么认为,实际上还没有用ELK来分析sql日志。但根据我对这个工具的初步看法,尤其是, LogStash,最近有不少博客正在讨论如何使用该工具进行分析。看看它,有几篇文章可以帮助你。 –

+0

是的,其实我正在努力。当我收集到足够的工作知识时,我会详细的发布。 – MontyPython

0

MySQL日志的大小可能很大,特别是对于生产MySQL服务器。在这种情况下,分析慢速/一般查询日志可能是一项单调乏味的任务(我之前一直处于相同的情况)。在这种情况下,Monyog的查询分析器功能非常方便,因为它提供了一个窗口,您可以从中获取缓慢/常规查询日志的全部内容。另外,你可以放置不同的过滤器,像逗号分隔的mysql用户,你想要查看执行的查询,主机名。您还可以限制日志文件的大小或应从MySQL日志文件中读取的行数。 Monyog在分析MySQL日志的过程中帮了我很多时间,并且我认为它是目前市场上定价最好的市场。

它还有另一个称为实时的功能,它将显示在实时会话中执行的查询,您还可以保存会话以便在将来需要时进行查看。您可以选择不同的嗅探模式,如性能架构,Processlist或MySQL代理来嗅探MySQL查询。您可以启用警报来随时了解MySQL服务器的状态。