如何分析MySQL慢查询日志或MySQL通用查询日志?

时间:2016-04-26 06:50:58

标签: mysql linux mysql-slow-query-log log-analysis mysqldumpslow

分析日志是一个主要问题。如果你有一个遗留代码和成百上千的查询运行,你一定会对改进的地方和改进的地方以及需要改进的程度感到困惑,因为总是会在努力工作之间进行权衡关于某个优化问题。

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

那么如何分析MySQL日志呢?

2 个答案:

答案 0 :(得分:3)

一个选项:Percona Toolkit

几个月前对慢速日志进行了大量分析..

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

列举一些用于分析SLOW LOGS的有用函数:

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 :(得分:1)

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

在使用移动应用程序或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

这里有一个注释:你可以使用sort -u,也可以使用sort | uniq -c但是要确保uniq不会独立工作,它只会在你用sort进行管道时才能工作。排序应在uniq。

之前完成

使用mysqldumpslow分析日志

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

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

如果您需要进行详细的日志分析,则应在计算机上设置ELK堆栈并将mysql连接到日志分析设置。或者,您可以使用NewRelic来分析MySQL日志。

相关问题