首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL超时配置正确打开方式

MySQL超时配置正确打开方式

作者头像
只喝牛奶的杀手
发布2025-05-20 19:06:23
发布2025-05-20 19:06:23
21900
代码可运行
举报
运行总次数: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
运行
复制
Statement.setQueryTimeout

Spring 可以使用

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

MyBatis-Plus可以使用

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

MyBatis-XML文件可以使用:

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

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

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档