mysql timeout java_java-c3p0 maxIdleTime和mysql的wait_timeout相同?

首先让我们了解mysql属性.

> interactive_timeout:mysql shell会话的交互式超时

在几秒钟内像mysqldump或mysql命令行工具.连接处于睡眠状态.大多数情况下,这是设置为更高的值,因为你不希望它在mysql cli上做某事时断开连接.

> wait_timeout

:MySQL将在之前等待的不活动期间的秒数

它将关闭非交互式连接上的连接

秒.示例:从java连接.连接处于睡眠状态.

现在让我们了解c3po属性及其与DB道具的关系.(我将从你的问题中复制)

maxIdleTime: (Default: 0) Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never

expire.

这指的是连接对象可以使用多长时间并且可以在池中使用.一旦超时结束,c3po将销毁或回收它.

现在,当maxIdleTime高于wait_timeout时会出现问题.

假设如果mxIdleTime:50秒并且wait_timeout:40秒,则会出现连接超时异常:如果您尝试在最后10秒内执行任何操作,则会断开管道.所以maxIdelTime应该总是小于wait_timeout.

您可以使用以下属性代替maxIdleTime.

> idleConnectionTestPeriod设置连接长度的限制

在测试前保持闲置状态.没有preferredTestQuery,默认

是DatabaseMetaData.getTables() – 它与数据库无关,并且

虽然一个相对昂贵的电话,可能是一个很好的

数据库比较小.如果你对性能有偏见,请使用a

查询特定于您的数据库(即preferredTestQuery =“SELECT 1”)

> maxIdleTimeExcessConnections将恢复connectionCount

在活动激增之后下至minPoolSize.

请注意,任何池属性(例如maxIdleTime)仅影响池中的连接,即如果hibernate已获取连接并使其空闲时间超过maxIdleTime然后尝试执行任何操作,那么您将获得“Broken Pipe”

在mysql上使用较低的wait_timeout是件好事,但是当你已经构建了一个应用程序时,它并不总是正确的.

在减少它之前,你必须确保在你的应用程序中你没有保持连接打开等待更多的wait_time.

您还必须考虑获取连接是一项昂贵的任务,如果等待时间太短,那么它会超过连接池的全部目的,因为它会经常尝试获取连接.

当您没有手动进行连接管理时(例如使用Spring跨国API时),这一点尤为重要.当您输入@Transaction带注释的方法时,Spring会启动事务,以便从池中获取连接.如果您正在进行任何Web服务调用或读取某个文件,这将花费比wait_time更多的时间,那么您将获得异常.

我曾经遇到过这个问题.

在我的一个项目中,我有一个cron,可以为客户进行订单处理.为了加快速度,我使用了批处理.现在,一旦我检索了一批客户并进行了一些处理(没有数据库调用).当我尝试保存所有的命令时,我用来破坏管道异常.问题是我的wait_timeout是1分钟,订单处理花了更多的时间.所以我们不得不把它增加到2分钟.我可以减少批量大小,但这使得整体处理速度变慢.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值