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

如何分析MySQL慢速查询日志或MySQL通用查询日志?,mysql,linux,mysql-slow-query-log,log-analysis,mysqldumpslow,Mysql,Linux,Mysql Slow Query Log,Log Analysis,Mysqldumpslow,分析日志是一个主要问题。如果您有一个遗留代码和成百上千个正在运行的查询,那么您肯定会被需要改进的内容、需要改进的地方以及需要改进的程度所迷惑,因为在处理某个优化问题时,您需要付出多少努力,这两者之间总是存在权衡 那么,第一步就是分析我们哪里出了问题。这只能通过正确分析日志来实现。否则,您可能不知道应用程序到底出了什么问题 那么如何分析MySQL日志呢?使用关键字搜索,即表名或列名。 在使用移动应用程序、web应用程序或桌面应用程序时,您将知道加载哪个页面所花费的时间超过预期。很多时候,加载时间受

分析日志是一个主要问题。如果您有一个遗留代码和成百上千个正在运行的查询,那么您肯定会被需要改进的内容、需要改进的地方以及需要改进的程度所迷惑,因为在处理某个优化问题时,您需要付出多少努力,这两者之间总是存在权衡

那么,第一步就是分析我们哪里出了问题。这只能通过正确分析日志来实现。否则,您可能不知道应用程序到底出了什么问题


那么如何分析MySQL日志呢?

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

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

现在,如果您正在搜索慢速查询日志,并且为自己设置了非常高的标准,并将慢速查询时间设置为400毫秒,那么很可能会加载慢速查询日志,除非您是天才。所以,我们做一件简单的事情:

grep 'table_name' /var/lib/mysql/mysql-slow.log
这带来的问题比解决的问题多,因为所有重要问题都没有答案,因为这没有给出查询时间、查询日期等。因此,请执行以下操作:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log
-在查询之前,bx给出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分析日志

获取前10个表现不佳的查询

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

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

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

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

现在,如果您正在搜索慢速查询日志,并且为自己设置了非常高的标准,并将慢速查询时间设置为400毫秒,那么很可能会加载慢速查询日志,除非您是天才。所以,我们做一件简单的事情:

grep 'table_name' /var/lib/mysql/mysql-slow.log
这带来的问题比解决的问题多,因为所有重要问题都没有答案,因为这没有给出查询时间、查询日期等。因此,请执行以下操作:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log
-在查询之前,bx给出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分析日志

获取前10个表现不佳的查询

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

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

一个选项:Percona Toolkit

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

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

要列出一些用于分析慢速日志的有用函数,请执行以下操作:

pt查询摘要

可以分析MySQL慢速、常规和二进制日志中的查询。(二进制日志必须首先转换为文本,请参见--type)。它还可以使用来自tcpdump的ShowProcessList和MySQL协议数据。默认情况下,该工具报告哪些查询最慢,因此最需要优化。通过使用--group by、--filter和--embedded属性等选项,可以创建更复杂和定制的报告

用法示例
pt查询摘要slow.log

pt索引用法

从日志中读取查询并分析它们如何使用索引


当然,不是每个人都可以使用这个工具,但是如果你可以,这应该会非常有用。

一个选项:Percona Toolkit

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

我发现Percona工具包非常有用。使用此工具包,您可以轻松地