0

什么时间戳用于计算mysql慢查询日志中的query_time参数?找不到该参数的任何定义。我唯一发现的是

获取初始锁的时间不计入执行时间。

来自:http ://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html

我问这个问题是因为我想知道慢速日志中的“request_time”给出的时间是否包括队列中的等待时间(如果有的话)。

如果有一些队列,是否有可能在执行新查询时记录当前等待队列长度(最好在慢日志中)。

如果没有队列,如果所有线程当前都在执行某个查询,mysql 如何处理传入的查询?更新:将这些查询保留在 TCP 缓冲区中,直到它们可以被线程执行?

欢迎提供进一步阅读的链接。

问候科尔比尼安

4

1 回答 1

0

没有你描述的队列。

当查询开始时,连接专用于运行它。由于连接之间共享的各种东西,它可能被大量“互斥锁”中的任何一个阻塞。当查询运行时,它可能必须等待 I/O 从磁盘读取块。

慢日志中的查询时间本质上是查询的时钟时间。如果有其他连接挂在互斥体上或执行大量 I/O,则通常需要 1 秒的查询可能需要 3 秒。

缓存将使查询运行得更快。第一次运行查询(重新启动 mysql 后),由于所有未缓存的 I/O,它将运行缓慢。

如果您使用引擎 MyISAM,由于 MyISAM 的表锁定,“lock_time”通常很重要。InnoDB 在 lock_time 中很少显示超过几分之一毫秒。

在旧版本的 MySQL 中,计时器类似于 TIMESTAMP,分辨率为 1 秒。在较新的版本中,它具有更高的分辨率。

慢日志条目开始的时间是查询开始的时间戳。您可能会注意到,慢日志条目并不总是按照此顺序排列。这仅仅是因为在查询完成之前不会将慢日志条目写入文件。

好的,有一个队列——但几乎从不需要它。它是在建立连接的时候。如果已经存在max_connection连接,请参阅back_log。我再说一遍,这不是执行查询的队列。

于 2015-03-15T04:03:57.173 回答