如何解读MySQL产生的慢查询日志信息?

     2023-02-16     223

关键词:

【中文标题】如何解读MySQL产生的慢查询日志信息?【英文标题】:How to interpret slow query log information generated by MySQL? 【发布时间】:2013-10-02 21:21:45 【问题描述】:

所以我对慢查询日志的理解是,它记录了我们在 my.conf 文件中设置的所有那些花费 >= 时间(以秒为单位)的查询的信息。

现在让我们采用 3 个不同的 SELECT 查询的 3 个案例(针对具有 INNODB 引擎的表):

QUERY I: Query_time:32.937667 Lock_time:0.000081 Rows_sent:343 Rows_examined: 12714043

QUERY II: Query_time: 12.937667 Lock_time: 0.000081 Rows_sent: 43 Rows_examined: 714043

QUERY III: Query_time:42.937667 Lock_time:0.000081 Rows_sent:18 Rows_examined:483

对我来说,QUERY I 和 QUERY II 看起来都可能是查询错误或索引不佳(或缺少索引)或碎片化的表数据等(我可能遗漏的任何其他情况?),用户可能会考虑改进查询执行时间。

但是对于 QUERY III,我无法理解,我的意思是数据库可能真的出了什么问题,它需要 42 秒才能检查 483 行并发回其中的 18 行(锁定可以忽略不计)时间)。当我看到它间歇性发生时,这变得更加令人困惑。

所以我在这里真正想问的是:

我应该如何解释锁定时间信息?这是否意味着查询必须等待那么多秒才能真正开始执行?如果是,那么在我的示例查询 III 中实际上花费了 42 秒来检查 483 行并发回其中的 18 行? 如果锁定时间可以忽略不计,但查询时间仍然非常巨大,只有几百行被检查并发回,我应该从哪里开始寻找问题? 可能是查询在某些后台 IO 活动中花费了太多时间吗?说日志或 bin-logging。 表大小对查询性能的影响有多大?例如我们能说 MySQL 足以处理 200+百万行的表吗 有没有更好的工具或方法来监控数据库活动,专门用于了解数据库的后台活动?简而言之,检查该查询在哪里花费了大部分时间。

可能有很多因素会影响这种缓慢的查询,所以如果您觉得需要更多信息来帮助我,请告诉我。

【问题讨论】:

【参考方案1】:

Query_time:12.937667 Lock_time:0.000081 Rows_sent:43 Rows_examined:714043

Query Time: Total time including lock time query has taken

Lock_Time: Total query query was in a locked state

Rows sent: Total rows sent by server to client

Rows examined: Total rows scanned by a MySQL server for a query

【讨论】:

【参考方案2】:

锁定时间是查询开始执行之前所花费的时间。即,等待其他线程放弃对当前查询需要锁定的数据的锁定的时间。

查询时间是执行查询的时间。如果行不在缓冲池中,这可能涉及等待 I/O。在数据加载到缓冲池之后,对相同的数据重复相同的查询可能会更快。

如果您的查询是针对给定查询在磁盘上排序,即使它检查几行也会变慢。

如果您的 I/O 系统负担过重,您可能会遇到间歇性缓慢。这也可能发生在虚拟化 I/O(例如,廉价的 AWS 实例)上。或者,如果您的磁盘开始出现故障,它们可能会间歇性地出错。

监控 iostat 并观察队列长度、平均等待时间和服务时间。查看是否存在缓慢的时期,或者性能和吞吐量是否或多或少一致。

检查的行不反映获取给定行所需的多个 I/O。例如,如果该行有很多大的 BLOB/TEXT/VARCHAR 列存储在溢出页上。或者如果事务需要访问回滚段以获取某些行的旧版本,如果它们在事务开始后已被修改。

检查的行数也不能告诉我们查询中的表达式有多复杂。你可能正在计算Fibonacci sequences in stored functions 或类似的疯狂的东西。

如果没有看到查询及其 EXPLAIN 报告,很难概括解释缓慢的原因,仅给出慢查询日志中的那些数字。

MySQL 当然可以在一个表中存储 2 亿行,但在那个规模下,即使索引可以将搜索减少到检查的 483 行,您也会开始遇到性能问题。这是因为depth of the B-tree index and size of an indexed column 与查找这 483 行所需的 I/O 操作数直接相关。 I/O 越多,花费的时间就越长,这并没有反映在检查的行中。查询时间包括 I/O 时间,但并不清楚查询时间有多少是由于 I/O 造成的。

寻找更详细诊断的其他一些地方是:

MySQL Performance Schema

MySQL Query Profiler(但请注意,不推荐使用此功能以支持性能架构)

Enhanced verbosity slow query log in Percona Server 报告查询等待 I/O 所花费的时间。

【讨论】:

感谢您的精彩回答。 Query_time 使用什么单位?秒?毫秒? @JackM。 ***.com/questions/6936593/… 如果单线程按顺序在表上插入插入,锁定时间应该为零,因为没有其他线程可以获取锁定。但我看到锁定时间大于零

如何动态开启mysql的慢查询日志记录

参考技术A在日常开发当中,经常会遇到页面打开速度极慢的情况,通过排除,确定了,是数据库的影响,为了迅速查找具体的SQL,可以通过Mysql的日志记录方法。--打开sql执行记录功能setgloballog_output='TABLE';--输出到表setgloba... 查看详情

phpMyAdmin中的慢查询但Mysql慢查询日志文件中没有[关闭]

】phpMyAdmin中的慢查询但Mysql慢查询日志文件中没有[关闭]【英文标题】:SlowqueriesinphpMyAdminbutnotinMysqlslowquerylogfile[closed]【发布时间】:2022-01-1718:46:15【问题描述】:Mysql慢查询日志开启并且正在工作,long_query_time为0.5。我在.log文... 查看详情

使用mysql的慢查询日志找到低效的sql语句

如题,要开启mysql的慢查询日志可以在mysql的配置文件中的[mysqld]下设置两项:       log-slow-queries=D:/soft/PHPnow/MySQL-5.1.50/test.log        long_query_ 查看详情

如何分析 WordPress 安装的慢查询日志?

】如何分析WordPress安装的慢查询日志?【英文标题】:HowcanIanalyzeaSlowQuerylogforaWordPressinstall?【发布时间】:2012-04-2207:42:17【问题描述】:我在安装WordPress时遇到了一些性能问题。我已经运行了多个慢查询测试,虽然我确实看到它... 查看详情

Django 慢查询:将 django 过滤语句连接到数据库日志中的慢查询

...如果您尝试诊断mysql后端中的慢查询并使用Django前端,您如何将后端报告的慢查询与Django前端代码中的特定查询集联系起来?【问题讨论】 查看详情

如何查找mysql中查询慢的sql语句

参考技术A1、首先,要开启mysql的慢查询日志。在mysql的配置文件:my.ini中添加如下两个配置项:log-slow-queries=E:\Servers\MySql5.5\data\mysql_slow_query.log//mysql慢查询日志记录位置long_query_time=5//定义慢查询sql的时间,当前配置表... 查看详情

如何开启mysql慢查询日志

开启MySQL慢查询日志//查看慢查询时间showvariableslike"long_query_time";默认10s//查看慢查询配置情况showstatuslike"%slow_queries%";//查看慢查询日志路径showvariableslike"%slow%";修改配置文件在my.ini中加上下面两句话log-slow-qu... 查看详情

mysql高级篇——聊聊mysql的慢查询日志(代码片段)

...器的优化步骤当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。整个流程划分成了观察(Showstatus)和行动(Action)两个部分。字母S的部分代表观察(会使用相... 查看详情

redis慢查询日志(代码片段)

...:MySQL)提供慢查询日志帮助开发与运维人员定位系统存在的慢操作.所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录到慢查询日... 查看详情

如何识别缺少索引的慢查询?

】如何识别缺少索引的慢查询?【英文标题】:HowdoIidentifyslowqueriesmissinganindex?【发布时间】:2019-09-2416:57:59【问题描述】:在慢日志上使用SETGLOBALlog_slow_verbosity=\'query_plan,explain\';,我得到很多输出,但我很难理解解释。#User@Host:... 查看详情

给定连接上的慢 MySQL 查询何时会影响其他连接?

】给定连接上的慢MySQL查询何时会影响其他连接?【英文标题】:WhendoesaslowMySQLqueryonagivenconnectionaffectotherconnections?【发布时间】:2012-07-0119:10:40【问题描述】:我想我对此有一个基本的了解,但我希望有人能给我更多的细节,因... 查看详情

mysql日志分析工具之mysqlsla(代码片段)

一、前言当我们使用自己搭建的mysql的时候,如何排查慢日志呢?如何对慢日志进行分析呢?下面介绍两款常用的慢日志分析工具:mysqldumpslowmysqlsla二、mysqldumpslow这是一款mysql自带的慢查询工具,个人使用下来... 查看详情

mysql慢查询日志(代码片段)

MySQL慢查询日志MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中假如运行时间正好等于long_query_time的情况,并不会... 查看详情

mysql慢查询日志总结

慢查询日志概念    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,... 查看详情

mysql日志

#查序mysql的错误日志showvariableslike’log_error%’;#查序mysql的二进制日志binlog默认开启#查序mysql的慢查询日志在my.cnf中配置。https://www.cnblogs.com/saneri/p/6656161.html 查看详情

mysql日志

#查序mysql的错误日志showvariableslike’log_error%’;#查序mysql的二进制日志binlog默认开启#查序mysql的慢查询日志在my.cnf中配置。https://www.cnblogs.com/saneri/p/6656161.html 查看详情

mysql慢查询和php-fpm慢日志

...个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句! ... 查看详情

一分钟快速搞懂redis的慢查询分析

...等信息,它可以用来帮助开发和运维人员定位系统中存在的慢查询。可以使用slowlogget命令获取慢查询日志,在slowlogget后面还可以加一个数字,用于指定获取慢查询日志的条数,比如,获取3条慢查询日志:从上面的例子中,可以... 查看详情