MySQL是否有查询队列,慢日志中query_time后面是什么?

Does MySQL have query queues and what's behind query_time in the slow log?

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

The time to acquire the initial locks is not counted as execution time.

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

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

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

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

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

问候 科尔比尼安

没有您描述的队列。

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

慢日志中的查询时间本质上是查询的挂钟时间。如果有其他连接挂在互斥锁上或执行大量 I/O.

,通常需要 1 秒的查询可能需要 3 秒

缓存会让查询运行更快。第一次 运行 查询(重新启动 mysql 后),由于所有未缓存的 I/O.

,它会 运行 变慢

如果您使用引擎 MyISAM,由于 MyISAM 的 table 锁定,"lock_time" 通常很重要。 InnoDB 在 lock_time.

中很少显示超过几分之一毫秒

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

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

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