JDBC连接池的性能比较

史蒂夫·B:

是否有人可以比较不同ConnectionPool实现的性能特征?

背景:我有一个应用程序,该应用程序在同一线程上的后台线程中运行db更新到mysql实例。使用数据源com.mchange.v2.c3p0.ComboPooledDataSource偶尔会给我们带来SocketException:com.mysql.jdbc.CommunicationsException:由于底层异常导致通信链接失败:

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)

增加mysql连接超时会增加这些错误的频率。

这些错误在切换到其他连接池(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource)时消失了;但是,性能可能会更差,并且内存配置文件也是如此(与c3p0池相比,我们得到的GC更少,而且更大)。

尼尔·科菲(Neil Coffey):

无论使用哪种连接池,都需要假定该连接可以随时随机关闭,并使您的应用程序处理该连接池。

在“受信任”网络上建立长期数据库连接的情况下,经常发生的情况是操作系统对打开连接的时间设置了时间限制,或者定期运行一些“连接清除”代码。但是,原因并没有太大关系-您应该假设可以“从您的脚下拔下”连接,并相应地处理这种情况,这只是网络生活的一部分。

因此,鉴于此,我真的看不到不允许您以编程方式处理这种情况的连接池框架。

(顺便说一句,这是我的另一种情况,我很高兴自己编写了自己的连接池代码;没有黑匣子神秘地吞噬了内存,也没有必要四处寻找“魔术参数” ...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章