简体   繁体   English

C3P0 preferredTestQuery配置

[英]C3P0 preferredTestQuery configuration

I am using c3p0 0.9.1.2 config c3p0 ComboPooledDataSource. 我正在使用c3p0 0.9.1.2 config c3p0 ComboPooledDataSource。 Everything seem ok, but preferredTestQuery takes a lot of time and uses high CPU on DB server. 一切似乎都很好,但是preferredTestQuery需要很多时间,并且在数据库服务器上使用高CPU。

This is my configuration: 这是我的配置:

<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>

During the day SELECT 1 FROM DUAL runs about 1 million times and takes about 30% of CPU. 在一天中, SELECT 1 FROM DUAL运行大约一百万次,并占用大约30%的CPU。

So, can I decrease the total number of preferredTestQuery executions a day? 所以,我可以减少总数preferredTestQuery处决了一天? Or shall I use another query to test? 还是应该使用其他查询进行测试?

Could you please advise me on a better configuration of c3p0? 您能否建议我更好地配置c3p0?

First : 首先:

<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>

Are there a million Connections checked in per day, and do the Connections do very little on checkout? 每天是否有一百万个连接签入,并且结帐时签收很少? That's the most straightforward explanation for what you are seeing, lots of Connections checked out and then checked in without doing any meaningful work. 这是您所看到的内容的最直接的解释,许多Connections先签出然后再签入,而没有做任何有意义的工作。

Still, what you describe is weird. 不过,您所描述的却很奇怪。 The whole point of "SELECT 1 FROM DUAL" is that it's supposed to be a very easy and efficient query to resolve. “ SELECT 1 FROM DUAL”的全部要点是,它应该是一个非常简单有效的查询。 Is it an Oracle DB, the backend for which that query makes sense? 它是Oracle DB,对于该查询有意义的后端吗? (For several other DBMSs, just "SELECT 1" is fine.) I'd make sure "SELECT 1 FROM DUAL" is the appropriate query for your back end, that DUAL is actually the built-in dummy table it is supposed to be. (对于其他几个DBMS,只需“ SELECT 1”就可以了。)我将确保“ SELECT 1 FROM DUAL”是适合您后端的查询,DUAL实际上是应该是的内置虚拟表 If the query is doing real work that's a problem. 如果查询在做实际的工作,那就是一个问题。

An easy thing to do, if you can, would be to upgrade from the very old 0.9.1.x series to a more recent version. 如果可以的话,要做的一件简单的事情就是从非常老的0.9.1.x系列升级到更新的版本。 The 0.9.5.x series uses the Connection 's native isValid() method to test (if no preferredTestQuery is set, which usually it should not be with 0.9.5+ and a JDBC4+ driver). 0.9.5.x系列使用Connection的本机isValid()方法进行测试(如果未设置preferredTestQuery ,通常不应该使用0.9.5+和JDBC4 +驱动程序)。 Hopefully your JDBC driver does a good job of selecting an efficient test query. 希望您的JDBC驱动程序在选择有效的测试查询方面做得很好。

There's some advice about Connection testing setup in c3p0's docs. 在c3p0的文档中有一些有关连接测试设置的建议

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM