17维客-生活百科-linux百科 >>所属分类 >> 数据库    linux百科   

MySQL timeout解析 编辑词条 发表评论(0)

  “And God said, Let there be network: and there was timeout”

  在使用MySQL的过程中,你是否遇到了众多让人百思不得其解的Timeout?

  那么这些Timeout之后,到底是代码问题,还是不为人知的匠心独具?

  本期Out-man,讲述咱们MySQL DBA自己的Timeout。

  先看一下比较常见的Timeout参数和相关解释:

  connect_timeout

  The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake.

  interactive_timeout

  The number of seconds the server waits for activity on an interactive connection before closing it.

  wait_timeout

  The number of seconds the server waits for activity on a noninteractive connection before closing it.

  net_read_timeout

  The number of seconds to wait for more data from a connection before aborting the read.

  net_write_timeout

  The number of seconds to wait for a block to be written to a connection before aborting the write.

  从以上解释可以看出,connect_timeout在获取连接阶段(authenticate)起作用,interactive_timeout和wait_timeout在连接空闲阶段(sleep)起作用,而net_read_timeout和net_write_timeout则是在连接繁忙阶段(query)起作用。

  获取MySQL连接是多次握手的结果,除了用户名和密码的匹配校验外,还有IP->HOST->DNS->IP验证,任何一步都可能因为网络问题导致线程阻塞。为了防止线程浪费在不必要的校验等待上,超过connect_timeout的连接请求将会被拒绝。

  即使没有网络问题,也不能允许客户端一直占用连接。对于保持sleep状态超过了wait_timeout(或interactive_timeout,取决于CLIENT_INTERACTIVE标志)的客户端,MySQL会主动断开连接。

  即使连接没有处于sleep状态,即客户端忙于计算或者存储数据,MySQL也选择了有条件的等待。在数据包的分发过程中,客户端可能来不及响应(发送、接收、或者处理数据包太慢)。为了保证连接不被浪费在无尽的等待中,MySQL也会选择有条件(net_read_timeout和net_write_timeout)地主动断开连接。

  这么多Timeout足以证明MySQL是多么乐于断开连接。而乐于断开连接的背后,主要是为了防止服务端共享资源被某客户端(mysql、mysqldump、页面程序等)一直占用。

附件列表


→如果您认为本词条还有待完善,请 编辑词条

上一篇Linux下MySQL的管理与配置下一篇linux下纯手动安装MySQL源码的步骤

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

收藏到: Favorites  

词条信息

hdwiki
hdwiki
书童
词条创建者 发短消息   
sjg9999
sjg9999
超级管理员
最近编辑者 发短消息   

相关词条