首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C3P0 preferredTestQuery配置

C3P0 preferredTestQuery配置
EN

Stack Overflow用户
提问于 2019-09-18 23:51:55
回答 2查看 327关注 0票数 0

我正在使用c3p0 0.9.1.2 config c3p0 ComboPooledDataSource。看起来一切正常,但是preferredTestQuery需要很长时间,并且占用DB服务器上的高CPU。

这是我的配置:

代码语言:javascript
复制
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass"><value>${server.database.driver}</value></property>
        <property name="jdbcUrl"><value>${server.database.url}</value></property>
        <property name="user"><value>${server.database.user}</value></property>
        <property name="password"><value>${server.database.password}</value></property>
        <property name="initialPoolSize"><value>2</value></property>
        <property name="minPoolSize"><value>2</value></property>
        <property name="maxPoolSize"><value>10</value></property>
        <property name="idleConnectionTestPeriod"><value>600</value></property>
        <property name="maxIdleTime"><value>0</value></property>
        <property name="preferredTestQuery"><value>SELECT 1 FROM DUAL</value></property>
        <property name="testConnectionOnCheckin"><value>true</value></property>
    </bean>

在一天中,SELECT 1 FROM DUAL运行了大约一百万次,占用了大约30%的CPU。

那么,我可以减少每天执行preferredTestQuery的总次数吗?或者我应该使用另一个查询来测试?

你能给我一些关于c3p0更好的配置的建议吗?

EN

回答 2

Stack Overflow用户

发布于 2019-09-19 00:16:00

首先:

代码语言:javascript
复制
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" >
        <property name="driverClass" value="${server.database.driver}" />
        <property name="jdbcUrl" value="${server.database.url}" />
        <property name="user" value="${server.database.user}" />
        <property name="password" value="${server.database.password}" />
        <property name="initialPoolSize" value="2" />
        <property name="minPoolSize" value="2" />
        <property name="maxPoolSize" value="10" />
        <property name="idleConnectionTestPeriod" value="600" />
        <property name="maxIdleTime" value="0" />
        <property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
        <property name="testConnectionOnCheckin" value="true" />
    </bean>
票数 0
EN

Stack Overflow用户

发布于 2019-09-19 01:18:50

每天是否有一百万个连接签入,而这些连接在签出时做得很少?这是对你所看到的最直接的解释,大量的连接被检查出来,然后在没有做任何有意义的工作的情况下签入。

尽管如此,你描述的东西还是很奇怪。"SELECT 1 FROM DUAL“的全部要点是,它被认为是一个非常容易和高效的查询。它是Oracle DB吗?它是该查询有意义的后端吗?(对于其他几个DBMS,只需"SELECT 1“即可。)我要确保"SELECT 1 FROM DUAL“是适合您的后端的查询,DUAL实际上是它应该是的built-in dummy table。如果查询做的是真正的工作,那就是一个问题。

如果可以,一件容易做的事情是从非常旧的0.9.1.x系列升级到更新的版本。0.9.5.x系列使用Connection的原生isValid()方法进行测试(如果没有设置preferredTestQuery,通常不应该使用0.9.5+和JDBC4+驱动程序),希望您的JDBC驱动程序能够很好地选择有效的测试查询。

在C3P0的文档中有关于连接测试设置的some advice

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57996633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档