开发者社区> 优惠码发放> 正文

Mysql各种超时时间理解

简介: Mysql各种超时时间理解 笔者最近做一个项目被mysql驱动包的的超时设置给坑了,起因就是因为没设置好connection timeout 和socket timeout,导致线程全部阻塞等待,机器线程全挂起,也无法处理新的其它请求,所以做了下面一些总结。
+关注继续查看

Mysql各种超时时间理解

笔者最近做一个项目被mysql驱动包的的超时设置给坑了,起因就是因为没设置好connection timeout 和socket timeout,导致线程全部阻塞等待,机器线程全挂起,也无法处理新的其它请求,所以做了下面一些总结。

1、常见超时

  • transaction timeout

      设置的是一个事务的执行时间,里头可能包含多个statement,statement timeout(也相当于result set fetch timeout)设置的是一个statement的执行超时时间,即driver等待statement执行完成,接收到数据的超时时间(注意statement的timeout不是整个查询的timeout,只是statement执行完成并拉取fetchSize数据返回的超时,之后resultSet的next在必要的时候还会触发fetch数据,每次fetch的超时时间是单独算的,默认也是以statement设置的timeout为准)

  • jdbc socket timeout

       设置的是jdbc I/O socket read and write operations的超时时间,防止因网络问题或数据库问题,导致driver一直阻塞等待。(建议比statement timeout的时间长),默认为0,即永远等待,所以这个参数一定要设置不为0!

  • connection timeout

      建立socket连接的超时时间,单位为ms。在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,默认为0,即永远等待,所以这个参数一定要设置不为0!

  • os socket timeout

       这个是操作系统级别的socket设置(如果jdbc socket timeout没有设置,而os级别的socket timeout有设置,则使用系统的socket timeout值)。

上面的不同级别的timeout越往下优先级越高,也就是说如果下面的配置比上面的配置值小的话,则会优先触发timeout,那么相当于上面的配置值就"失效"了。

 

2、FAQ 
Q1. 我已经使用Statement.setQueryTimeout()方法设置了查询超时,但在网络出错时并没有产生作用。 

      查询超时仅在socket timeout生效的前提下才有效,它并不能用来解决外部的网络错误,要解决这种问题,必须设置JDBC的socket timeout。 

Q2. transaction timeout,statement timeout和socket timeout和DBCP的配置有什么关系? 

       当通过DBCP获取数据库连接时,除了DBCP获取连接时的waitTimeout配置以外,其他配置对JDBC没有什么影响。 

Q3. 如果设置了JDBC的socket timeout,那DBCP连接池中处于IDLE状态的连接是否也会在达到超时时间后被关闭? 

       不会。socket的设置只会在产生数据读写时生效,而不会对DBCP中的IDLE连接产生影响。当DBCP中发生新连接创建,老的IDLE连接被移除,或是连接有效性校验的时候,socket设置会对其产生一定的影响,但除非发生网络问题,否则影响很小。 

Q4. socket timeout应该设置为多少? 

        就像我在正文中提的那样,socket timeout必须高于statement timeout,但并没有什么推荐值。在发生网络错误的时候,socket timeout将会生效,但是再小心的配置也无法避免网络错误的发生,只是在网络错误发生后缩短服务失效的时间(如果网络恢复正常的话)。

原文地址http://blog.csdn.net/evankaka https://blog.csdn.net/Evankaka/article/details/81226425

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
30392 0
SQL 中删除超出时间限制的数据,并返回删除数据信息(Mybatis+postgresql)
前言 前一阵子,接到一个活,主要内容是这样的,数据库中存在一些过期的日志(可能是一天前的数据,或者是一个月前的数据,等等),将这些数据删除掉,并且返回这些数据的信息(就是说我得知道自己到底删了哪些数据呀?)。
1506 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21341 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23639 0
jquery ajax超时设置
jquery ajax超时设置 var ajaxTimeoutTest = $.ajax({   url:'', //请求的URL   timeout : 1000, //超时时间设置,单位毫秒   type : 'get', //请求方式,get或post   data :{}, //请求...
1101 0
mysql日期时间类型
year 类型 典型格式 '1990' 表示1901-2155年 预留 0000年 表示 错误时的选择 如果 输入的是两位 '00-69'表示 2000-2069年 '70-99'表示 1970-1999年 但是建议把日期全部输完整
47 0
+关注
优惠码发放
阿里云优惠码阿里云推荐券bieryun.com
569
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载