分析日志是一个主要问题。如果你有一个遗留代码和成百上千的查询运行,你一定会对改进什么、改进哪里以及改进多少感到困惑,因为在你要投入多少努力之间总是有一个权衡在某个优化问题上。
那么第一步,就是分析我们哪里出错了。这只能通过正确分析日志来实现。没有它,您可能不知道您的应用程序到底出了什么问题。
那么你如何分析 MySQL 日志呢?
分析日志是一个主要问题。如果你有一个遗留代码和成百上千的查询运行,你一定会对改进什么、改进哪里以及改进多少感到困惑,因为在你要投入多少努力之间总是有一个权衡在某个优化问题上。
那么第一步,就是分析我们哪里出错了。这只能通过正确分析日志来实现。没有它,您可能不知道您的应用程序到底出了什么问题。
那么你如何分析 MySQL 日志呢?
一种选择:Percona 工具包
几个月前对慢日志做了一些巨大的分析..
而且我觉得Percona Toolkit
非常有用。使用此工具包,您可以轻松地对慢速日志进行彻底分析,并轻松进行数据库优化。
举几个分析慢日志的有用函数:
pt-query-digest
可以分析来自 MySQL 慢、通用和二进制日志的查询。(二进制日志必须首先转换为文本,请参阅--type)。它还可以使用来自 tcpdump 的 SHOW PROCESSLIST 和 MySQL 协议数据。默认情况下,该工具会报告哪些查询最慢,因此最需要优化。可以使用 --group-by、--filter 和 --embedded-attributes 等选项创建更复杂和定制的报告。
使用示例pt-query-digest slow.log
pt-index-usage
从日志中读取查询并分析它们如何使用索引。
好吧,不是每个人都可以使用这个工具,但是如果可以的话,这应该会很有帮助。
使用关键字搜索,即表名或列名。
在使用您的移动应用程序、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分析日志
获取前 10 个表现不佳的查询。
mysqldumpslow -u root -p -s c -t 10
如果您需要进行详细的日志分析,您应该在您的机器上设置 ELK 堆栈并将您的 mysql 连接到日志分析设置。或者,您可以使用 NewRelic 来分析 MySQL 日志。