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

 更新时间:2021年10月13日 10:18:03   作者:张松然  
这篇文章主要给大家介绍了关于MySQL数据库超时设置配置的相关资料,通过文中的设置方法可以很好的解决大家遇到的mysql数据库超时问题,需要的朋友可以参考下

前言

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

1. JDBC超时设置

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

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

2. 连接池超时设置

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

3. MyBatis查询超时

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

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

4. 事务超时

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

总结

高级别的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高效可靠处理持久化数据的教程指南

    这篇文章主要给大家详细介绍了 MySQL 如何高效可靠处理持久化数据,文中有详细的流程步骤和代码示例,对我们的学习有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • Mysql 5.7.17忘记密码怎么办

    Mysql 5.7.17忘记密码怎么办

    这篇文章主要介绍了Mysql 5.7.17忘记密码的解决方法,需要的朋友可以参考下
    2017-03-03
  • mysql如何执行流程

    mysql如何执行流程

    MySQL主要分为server层和存储引擎层,server层负责连接、查询缓存、分析、优化和执行,存储引擎层负责数据存储和提取,SQL查询执行流程包括连接、认证、权限检查、分析、优化和执行,更新语句执行涉及重做日志(redolog)和归档日志(binlog)
    2024-11-11
  • GROUP_CONCAT的用法

    GROUP_CONCAT的用法

    GROUP_CONCAT的用法...
    2006-12-12
  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    Ubuntu15下mysql5.6.25不支持中文的解决办法

    Ubuntu15下mysql5.6.25出现乱码,不支持中文,该问题如何解决呢?下面看看小编是怎么解决此问题的,需要的朋友可以参考下
    2015-09-09
  • asp+mysql+utf8 网页出现乱码问题的解决方法

    asp+mysql+utf8 网页出现乱码问题的解决方法

    无论在网页中加多少UTF8的定义,显示的结果都还是会有一些小格子,反而定义为gb2312,显示完全正常
    2014-03-03
  • MySql 设置表格字段key中的值

    MySql 设置表格字段key中的值

    本文主要介绍了MySql 设置表格字段key中的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Mysql数据库乱码问题的对应方式

    Mysql数据库乱码问题的对应方式

    今天小编就为大家分享一篇关于Mysql数据库乱码问题的对应方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • mysql常用命令汇总介绍

    mysql常用命令汇总介绍

    本文给大家汇总了一下mysql常用的命令行指令,包括设置更改mysqlroot密码,连接mysql等,非常的细致全面,并附上运行效果截图,希望大家能够喜欢
    2018-03-03
  • MySQL复合查询(多表查询、子查询)的实现

    MySQL复合查询(多表查询、子查询)的实现

    MySQL复合查询是指在一个SQL语句中使用多个查询条件,以过滤和检索数据,本文主要介绍了MySQL复合查询(多表查询、子查询)的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12

最新评论