Mysql(MariaDB)wait_timeout是否排除查询执行时间?

时间:2018-11-20 12:54:23

标签: php mysql

我正在调整我的项目MYSQL数据库,因为有很多人建议我减少

  

wait_timeout

,但是我不清楚,这个会话变量是否排除查询执行时间,还是包括它?我将其设置为5秒钟,考虑到我有时可能会执行3-5秒钟的查询(是的,速度很慢,它们很少,但它们仍然存在),因此mysql连接至少有1 PHP脚本在MYSQL关闭脚本之前需要-2秒。 在MySQL文档中,没有关于如何开始计算超时以及是否包括执行时间的明确解释。也许您的经验可能会有所帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

  

wait_timeout session variable是否排除查询执行时间?

是的,它不包括查询时间。

max_execution_time controls how long the server will keep a long-running query alive before stopping it

您使用php连接池吗?如果这样,那么5秒就是非常短的wait_time。延长时间。 60秒可能很好。为什么?连接池的全部目的是保持一些从php到MySQL的空闲连接打开,因此php可以处理来自用户的请求,而无需打开连接。

这是它的工作方式。

  1. php坐在那里,监听传入的请求。
  2. 一个请求到达,并且php脚本开始运行。
  3. php脚本要求建立数据库连接。
  4. php(mysqli或PDO模块)用于查看连接池中是否有空闲连接在等待。如果是这样,它将连接传递到要使用的php脚本。
  5. 如果没有空闲连接,php将创建一个并将其传递给php脚本以供使用。此连接的创建开始wait_timeout倒计时。
  6. php脚本使用该连接进行查询。这将停止wait_timeout的倒计时,并开始max_execution_time的倒计时。
  7. 查询完成。这将停止max_execution_time的倒计时并重新开始wait_timeout的倒计时。根据需要重复执行6和7。
  8. php脚本释放连接,然后php将其插入连接池。返回第1步。wait_time现在正在该连接处于池中时对该连接进行递减计数。
  9. 如果连接的wait_time过期,则php从连接池中将其删除。

如果第9步经常发生,那么第5步也必须频繁发生,并且php对请求的响应速度会变慢。您可以通过增加wait_timeout来减少第9步的发生。

(注意:这是简化的:还规定了连接池中的最大连接数。)

MySQL也有一个interactive_timeout variable。就像wait_timeout,但用于通过mysql命令行程序进行的交互式会话。

当网络用户发出请求然后在完成之前放弃请求时会发生什么?例如,用户可能停止等待报告并转到另一个页面。在某些情况下,主机语言处理器会检测到用户连接的关闭,终止MySQL查询,然后将连接返回到池中。在其他情况下,查询将完成或达到max_execution_timeout障碍。然后,连接将返回到池中。在所有情况下,wait_timeout倒数仅在连接打开时处于活动状态,但没有在其上活动的查询。

答案 1 :(得分:0)

MySQL服务器超时的发生可能有多种原因,但最常见的情况是通过封闭的连接向MySQL发送命令时。 MySQL服务器可能由于 idle-timeout (空闲超时)而关闭了连接;但是,在大多数情况下,这是由应用程序错误,网络超时问题(在防火墙,路由器等上)或MySQL服务器重新启动引起的。

documentation可以明显看出,它不包括查询执行时间。它基本上是两次活动之间允许的最大空闲时间。如果超过该限制,服务器将自动关闭连接。

  

服务器等待活动的秒数   非交互式连接,然后再关闭它。

来自https://www.digitalocean.com/community/questions/how-to-set-no-timeout-to-mysql

  • 将wait_timeout配置为略长于应用程序连接池的预期连接生存期。这是一个很好的安全检查。
  • 考虑在线更改waittimeout值。这不需要MySQL重新启动,并且可以在运行的服务器中调整waittimeout,而不会导致停机。您将发出set global waittimeout = 60,创建的任何新会话都将继承此值。确保将设置保留在my.cnf中。如果应用程序放弃了连接,则任何现有连接都需要达到waittimeout的旧值。如果您确实有报告作业,这些事务将在事务处理中进行更长的本地处理,则可以考虑在连接时让此类作业发出设置为session wait_timeout = 3600的会话。

答案 2 :(得分:0)

根据参考手册,

服务器在关闭连接之前等待连接变为活动状态的时间(秒)。

从根本上讲,您可以容忍某人保留您的资源而无所事事的秒数?在决定采取哪种行动之前,您的“思考时间”可能经常超过5秒。保持自由。对于Web应用程序,某些过程需要5秒钟以上的时间才能运行查询,并且导致它们在5秒钟时终止。默认值为28800秒,这是不合理的。 60秒可能是一个合理的时间,可以预期将完成任何基于Web的过程。如果您的应用程序也在传统的工作环境中使用,那么15分钟的休息时间也不是不合理的。保持开放态度,避免出现“不良反馈”。