前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL超时配置正确打开方式

MySQL超时配置正确打开方式

作者头像
只喝牛奶的杀手
发布于 2025-05-20 11:06:23
发布于 2025-05-20 11:06:23
10000
代码可运行
举报
运行总次数:0
代码可运行

一切基于最近两天帮排查数据库阻塞问题说起,是这样的一个更新方法执行超时之后,一个事务在测试环境一直Runing,一直没提交也没回滚,相关的行操作也被阻塞掉。按说Spring Boot对数据库中都设置connection-timeout,超时的时候自动触发异常会自动回滚。不至于测试环境这个服务不可用。

数据库连接池用的hikari,但是我们对这个connection-timeout理解对吗?spring.datasource.hikari.connection-timeout:这个是获取连接的超时时间,就是从连接池返回连接的超时时间。

ConnectionTimeout来自GitHub的解释:

This property controls the maximum number of milliseconds that a client (that's you) will wait for a connection from the pool. If this time is exceeded without a connection becoming available, a SQLException will be thrown. Lowest acceptable connection timeout is 250 ms. Default: 30000 (30 seconds)

SQL执行超时时间设置:

JDBC可以直接使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Statement.setQueryTimeout

Spring 可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Transactional(timeout=10)

MyBatis-Plus可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mybatis-plus.configuration.default-statement-timeout

MyBatis-XML文件可以使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select id="" timeout="">xxx</select>

高级别的timeout依赖于低级别的timeout,只有当低级别的timeout无误时,高级别的timeout才能确保正常。超时时间一般有发起方/调用方设置。

大多时候我们线上遇到此种问题,找出对应的事务线程ID,赶紧去kill对应事务的进程。实在不行就用重启大法,事后大多数的做法是优化SQL,优化事务。但是SQL执行的超时时间还要设置的。避免系统在卡顿的时候导致事务阻塞,独占锁占用,其他事务锁等待。

我们该怎么样保护系统?分布式锁,乐观锁,X锁,间隙锁,大事务对数据行操作顺序不一致,我们在开发设计的时候应该怎么做?越是细节越是对技术的基础要求越高。只有稳定的架构我们再谈扩展性才严谨,在不稳定的架构上谈扩展只会给自己慢慢挖坑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
炸锅了,Java多线程批量操作,居然有人不做事务控制?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/09
1.7K2
炸锅了,Java多线程批量操作,居然有人不做事务控制?
Mybatis源码初探——优雅精良的骨架
Mybatis是一款半自动的ORM框架,是目前国内Java web开发的主流ORM框架,因此作为一名开发者非常有必要掌握其实现原理,才能更好的解决我们开发中遇到的问题;同时,Mybatis的架构和源码也是很优雅的,使用了大量的设计模式实现解耦以及高扩展性,所以对其设计思想,我们也非常有必要好好理解掌握。(PS:本系列文章基于3.5.0版本分析)
夜勿语
2020/09/07
4760
面试官:Java 多线程怎么做事务控制?一半人答不上来。。
推荐阅读:Spring Cloud Alibaba 杀疯了。。 项目代码基于:MySql 数据,开发框架为:SpringBoot、Mybatis 开发语言为:
Java技术栈
2022/07/26
8.7K4
面试官:Java 多线程怎么做事务控制?一半人答不上来。。
这些年,我写过的BUG(二)
最近的「BUG」都不疼不痒,基本秒修复。昨天遇到一个大坑,修复了好几个小时。这是一个事务挂起导致数据库连接未释放,然后导致获取数据库连接失败的「BUG」。
FunTester
2020/08/05
6010
REQUIRES_NEW导致数据库连接死锁
获取数据库连接的时间居然超过了30秒,正常情况下一个请求的处理时间是200ms,所以觉得特别奇怪。 按说即使数据库连接数小于请求并发数,因为数据库连接是共享的,请求也可以很快地获取到数据库连接并完成请求。但是实际却超过了30秒。
十毛
2019/07/18
3.8K0
MySQL 连接挂死了!该如何排查?
近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有时候属于“偶发”现象,难以在环境上快速复现;二来则是可靠性问题的定位链条有时候变得很长,极端情况下可能要从 A 服务追踪到 Z 服务,或者是从应用代码追溯到硬件层面。
程序员小富
2022/12/10
3.5K0
MySQL 连接挂死了!该如何排查?
HikariPool 连接池问题
问题描述: 腾讯云上 centos7 安装的 mysql 5.7.27,SpringBoot 使用 Hikaricp 连接池连接 MySQL。
全栈程序员站长
2022/09/10
4.2K2
HikariPool 连接池问题
揭秘JDBC超时机制
在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了网络,但业务系统却还是无法工作。 通过分析系统的thread dump发现,业务系统停在了JDBC API的调用上。20分钟后,系统仍处于WAITING状态,无法响应。30分钟后,系统抛出异常,服务恢复正常。
Bug开发工程师
2018/07/23
2.2K0
揭秘JDBC超时机制
MySQL中max_execution_time引发的血案
今天MySQL存储节点突然收到cpu持续100%的报警,持续时间长达数个小时。在控制台中通过show processlist查看当前进程,发现很多一模一样的SQL一直在运行,执行时间都超过数个小时。
林老师带你学编程
2021/12/07
2.5K0
MySQL中max_execution_time引发的血案
十二、Hikari:Apparent connection leak detected连接泄露分析
leak-detection-threshold:用来设置连接被占用的超时时间,单位为毫秒,默认为0,表示禁用连接泄露检测。
用户1422411
2022/06/25
3.2K0
HikariPool-1 - Connection is not available, request timed out after 30000ms
Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
程序员子龙
2024/01/05
2K0
聊聊hikari连接池的validationTimeout
HikariCP-2.7.6-sources.jar!/com/zaxxer/hikari/pool/HikariPool.java
code4it
2018/09/17
4.8K0
数据库连接池配置-系统数据库慢排查
1.接下来我们分析数据库,用SHOW FULL PROCESSLIST快照的方式每5秒刷一下进程列表,发现列表这两个语句在长时间运行着,最高有达到80多秒。杀掉之前马上又上来了。可以确定是由于这两个语句长时间查询把连接数占满了。
oktokeep
2025/03/04
2001
深入探讨:Spring与MyBatis中的连接池与缓存机制
在现代应用程序开发中,性能优化是一个永恒的话题。而在企业级Java应用开发中,Spring和MyBatis是两种非常流行的框架,它们的连接池和缓存机制对应用程序的性能有着至关重要的影响。本文将深入探讨Spring和MyBatis中的连接池和缓存机制,从基本概念到高级应用,全面覆盖这两个框架中的性能优化技术。
九转成圣
2024/06/16
3830
深入理解数据库编程中的超时设置
connect timeout和socket timeout都属于TCP层面的超时。
田守枝
2019/05/21
9.7K0
深入理解数据库编程中的超时设置
【追光者系列】HikariCP 源码分析之从 validationTimeout 来讲讲 2.7.5 版本的那些故事
摘要: 原文可阅读 http://www.iocoder.cn/HikariCP/zhazhawangzi/validationTimeout 「渣渣王子」欢迎转载,保留摘要,谢谢!
芋道源码
2019/10/29
1.6K0
【追光者系列】HikariCP 源码分析之从 validationTimeout 来讲讲 2.7.5 版本的那些故事
SpringBoot 中 HikariCP 的相关配置
通常,可以在application.yml中对数据源进行相应的配置,从性能方面来讲,数据库连接池的优先级为:HikariCP > druid > tomcat-jdbc > dbcp > c3p0 。自 SpringBoot 2.0 起,默认的数据库连接池便是 HikariCP,在 pom 文件中引入spring-boot-starter-parent后便无需再引入 HikariCP 的依赖。 对于 HikariCP 的配置,主要可以从两个方面获取: 1. SpringBoot官方参考文档 2. HikariCP的github发布页 为了便于日后可能的查询,在此记录下详细的配置信息。
京剧猫
2023/03/04
3K0
springboot的配置文件
spring.dao.exceptiontranslation.enabled 是否开启PersistenceExceptionTranslationPostProcessor,默认为true
张哥编程
2024/12/19
1430
mybatis datasource的工厂方法模式(深度好文)
工厂方法模式是使用抽象工厂(抽象类或接口)来生产抽象产品(抽象类或接口)的一个过程,由抽象工厂来决定抽象产品的生产过程,实际生产中由具体的工厂子类或者实现类来完成具体的产品子类或者实现类的生产。具体例子请参考 设计模式整理 。
算法之名
2019/08/20
9060
mybatis datasource的工厂方法模式(深度好文)
【追光者系列】HikariCP源码分析之故障检测那些思考 fail fast &amp; allowPoolSuspension
由于时间原因,本文主要内容参考了 https://segmentfault.com/a/1190000013136251,并结合一些思考做了增注。
用户1655470
2018/07/24
1.4K0
推荐阅读
相关推荐
炸锅了,Java多线程批量操作,居然有人不做事务控制?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档