当前位置: 首页 > 科技观察

如何配置MySQL数据库超时设置

时间:2023-03-16 22:58:40 科技观察

最近准备京东双11,在配置MySQL超时配置的时候,发现可以设置的地方很多。这么多超时配置有什么影响,配置会有什么影响?让我在今天的文章中分析一下。1、JDBC超时设置connectTimeout:表示等待与MySQL数据库建立socket连接的超时时间。默认值为0,表示不设置超时时间,单位为毫秒。推荐30000。linux系统默认的socketTimeout是30分钟,不能设置。2、连接池超时设置maxWait:表示从数据库连接池获取链接,连接池没有可用连接时的等待时间。默认值为0,表示无限等待。单位为毫秒,推荐600000。MyBatisquerytimeoutdefaultStatementTimeout:表示MyBatis配置文件中默认的查询超时时间,单位是秒,如果不设置,会无线等待。如果有些sql需要执行超过defaultStatementTimeout,可以通过Mapper文件中单独sql的超时时间来配置。4.事务超时事务超时用于控制事务执行的超时时间。执行时间是交易中所有代码执行的总和,单位是秒。总结高层超时依赖于低层超时。只有低级超时正确,高级超时才能正常。比如当socket超时出现问题时,高层的语句超时和事务超时都会失效。1、事务超时Spring提供的事务超时配置非常简单。它会记录每笔交易的开始时间和消费时间。当特定事件发生时,它会检查消费时间。当超过超时值时,将抛出异常。假设一个事务包含5条语句,每条语句的执行时间为200ms,其他业务逻辑的执行时间为100ms,那么事务超时至少要设置为1100ms(200*5+100)。2、StatementTimeout语句超时用于限制语句的执行时间,timeout的值通过调用JDBC的java.sql.Statement.setQueryTimeout(inttimeout)API来设置。但是现在开发者很少直接在代码中设置,更多是通过框架来设置。在iBatis中,语句超时的默认值可以通过sql-map-config.xml中的defaultStatementTimeout属性来设置。同时还可以在sqlmap中设置select、insert、update标签的timeout属性,从而独立配置不同SQL语句的超时时间。3、socket超时JDBC的socket超时在数据库突然停止或出现网络错误(由于设备故障等)时非常重要。由于TCP/IP的结构,套接字无法检测到网络错误,因此应用程序无法主动发现数据库连接断开。如果未设置套接字超时,应用程序将在数据库返回结果之前无限期地等待。这种连接称为死连接。为了避免死连接,套接字必须有超时配置。可以通过JDBC设置套接字超时。套接字超时可以避免应用程序在出现网络错误时无休止的等待,缩短服务失败的时间。不建议使用sockettimeout来限制statement的执行时间,所以sockettimeout的值一定要大于statementtimeout,否则sockettimeout先生效,statementtimeout就变得没有意义,不能生效。