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


Posted in MySQL onOctober 15, 2021

前言

最近备战京东双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数据库超时设置配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MyBatis 动态SQL全面详解
MySQL中datetime时间字段的四舍五入操作
mysql如何能有效防止删库跑路
Oct 05 #MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
You might like
PHP中for循环语句的几种变型
2007/03/16 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
浅谈PHP中的
2016/04/23 PHP
php5与php7的区别点总结
2019/10/11 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
小程序实现多个选项卡切换
2020/06/19 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
毕业生幼师求职自荐信
2013/10/01 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
文艺晚会策划方案
2014/06/11 职场文书
2014国庆节标语口号
2014/09/19 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
JavaScript 对象创建的3种方法
2021/11/17 Javascript