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 MVCC机制原理详解
Apr 20 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
解决Navicat for Mysql连接报错1251的问题(连接失败)
May 27 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
MySql按时,天,周,月进行数据统计
Aug 14 MySQL
MyBatis 动态SQL全面详解
MySQL中datetime时间字段的四舍五入操作
mysql如何能有效防止删库跑路
Oct 05 #MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
You might like
精美漂亮的php分页类代码
2013/04/02 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
jQuery代码优化 遍历篇
2011/11/01 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
js常用DOM方法详解
2017/02/04 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
一篇.NET面试题
2014/09/29 面试题
师范大学应届生求职信
2013/11/21 职场文书
精彩的推荐信范文
2013/11/26 职场文书
安全负责人任命书
2014/06/06 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
十岁生日答谢词
2015/01/05 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js