mysql更新数据超时是什么问题?应该如何解决?

XIAO 2020-05-16 15:19:07 java常见问答 8080

目前在java软件开发行业比较主流且受欢迎的数据库其实不少,mysql就是其中之一,那么你知道mysql更新数据超时是指什么问题吗·?一般应该如何解决呢?

JDBC超时设置

connectTimeout:是表示等待和MySQL数据库建立socket链接的超时时间,默认值是0,表示不设置超时,单位毫秒。

socketTimeout:表示客户端和MySQL数据库建立socket之后,读写socket时的等待的超时时间,linux系统默认的socketTimeout为30分钟,可以不设置。

连接池超时设置

maxWait:表示从数据库连接池取链接,连接池没有可用连接时的等待时间,默认值是0,表示无限的等待,单位毫秒。

MyBatis查询超时

defaultStatementTimeout:表示在MyBatis配置文件中默认查询超时间,单位秒,不设置则无线等待。

如果是一些sql需要执行超过defaultStatementTimeout可以通过Mapper文件单独的sql的timeout进行配置的。

事务超时

事务超时主要是用于控制事务执行的超时,执行时间是事务内所有代码执行总和,单位为秒。

高级别的timeout是依赖于低级别的timeout的,只有当低级别的timeout无误的时候,高级别的timeout才能确保正常。比如,当socket timeout出现问题时,高级别的statement timeout和transaction timeout都将失效。

Transaction Timeout

Spring提供的transaction timeout配置非常简单,它会记录每个事务的开始时间和消耗时间,当特定的事件发生时就会对消耗时间做校验,当超出timeout值时将抛出异常。

假设某个事务中包含5个statement,每个statement的执行时间是200ms,其他业务逻辑的执行时间是100ms,那么transaction timeout至少应该设置为1,100ms(200 * 5 + 100)。

Statement Timeout

statement timeout用来限制statement的执行时长,timeout的值通过调用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API进行设置。不过现在开发者已经很少直接在代码中设置,而多是通过框架来进行设置。

在iBatis中,statement timeout的默认值可以通过sql-map-config.xml中的defaultStatementTimeout 属性进行设置

Socket timeout

JDBC的socket timeout在数据库被突然停掉或是发生网络错误时十分重要。由于TCP/IP的结构原因,socket没有办法探测到网络错误,因此应用也无法主动发现数据库连接断开。

好了,以上就是本篇文章的全部内容了,还想了解更多java常见问答知识,记得来关注本站更多精彩内容哦。

推荐阅读:

mybatis返回map结果集该怎么返回?

mysql更新数据库慢是为什么?如何解决?

mysql更新数据库语句怎么写?mysql更新字段语句