MySQL数据库超时设置配置的方法实例

这篇文章主要给大家介绍了关于MySQL数据库超时设置配置的相关资料,通过文中的设置方法可以很好的解决大家遇到的mysql数据库超时问题,需要的朋友可以参考下

前言

最近备战京东双11,在配置mysql的超时配置发现有很多地方可以设置。这么多超时的配置有什么影响,以及配置会有什么影响呢?今天的文章就让我来大家来分析一下。

1. jdbc超时设置

connecttimeout:表示等待和mysql数据库建立socket链接的超时时间,默认值0,表示不设置超时,单位毫秒,建议30000

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

2. 连接池超时设置

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

MySQL数据库超时设置配置的方法实例

3. mybatis查询超时

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

MySQL数据库超时设置配置的方法实例

如果一些sql需要执行超过defaultstatementtimeout可以通过mapper文件单独的sql的timeout进行配置

MySQL数据库超时设置配置的方法实例

4. 事务超时

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

MySQL数据库超时设置配置的方法实例

总结

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

1. transaction timeout

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

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

2. statement timeout

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

在ibatis中,statement timeout的默认值可以通过sql-map-config.xml中的defaultstatementtimeout 属性进行设置。同时,你还可以设置sqlmap中select,insert,update标签的timeout属性,从而对不同sql语句的超时时间进行独立的配置。

3. socket timeout

jdbc的socket timeout在数据库被突然停掉或是发生网络错误(由于设备故障等原因)时十分重要。由于tcp/ip的结构原因,socket没有办法探测到网络错误,因此应用也无法主动发现数据库连接断开。如果没有设置socket timeout的话,应用在数据库返回结果前会无期限地等下去,这种连接被称为dead connection。

为了避免dead connections,socket必须要有超时配置。socket timeout可以通过jdbc设置,socket timeout能够避免应用在发生网络错误时产生无休止等待的情况,缩短服务失效的时间。

不推荐使用socket timeout来限制statement的执行时长,因此socket timeout的值必须要高于statement timeout,否则,socket timeout将会先生效,这样statement timeout就变得毫无意义,也无法生效。

到此这篇关于mysql数据库超时设置配置的文章就介绍到这了,更多相关mysql数据库超时设置配置内容请搜索钦钦技术栈以前的文章或继续浏览下面的相关文章希望大家以后多多支持钦钦技术栈!

原文链接:https://www.pianshen.com/article/2936401120/

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/4846/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-07-23 12:45:39
下一篇 2022-07-23 12:45:51

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!