c3p0实现了符合JDBC规范的透明的PreparedStatement池。在一些情况下,Statement池能够显著地提高应用程序的性能。但在另一些情况下,Statement池的开销又会稍微的降低性能。statement到底能不能改善性能或者能够改善多少性能还是取决于你的数据库对查询的解析,规划和优化(parsing, planning , and optimizing)。不同数据库(和JDBC驱动)之间在这个方面存在很大的差异。给你的应用程序在使用和不使用statement池的时候设定基准,然后比较它们来看看究竟statement能不能改善性能是个不错的点子。
你可以通过设置下面的配置参数来配置statement池:
[list]
[]maxStatement
[]maxStatementPerConnection
[/list]
maxStatement是JDBC规范的标准参数。maxStatement定义了每个数据源会缓存的PreparedStatement的总数。池内的Statement总数在达到这个限制时会销毁那些最近最近最少使用的(least-recently-used)Statement。这听起来很简单,不过事实上有些奇怪,因为从概念上来讲,被缓存的Statement是属于单个的数据库连接的,它们并不是全局资源。
为了弄清楚maxStatements的大小,你不应该简单地认为它就是池中statement的数量,你应该将你的应用程序中的最常用的PreparedStatement的数量乘以合理的连接数(比如在一个高负荷的应用中的maxPoolSize值)。
maxStatementsPerConnection不是一个标准的配置参数,这可能会使你感觉有些不自然。它定义了连接池中每个连接最多能拥有(缓存)多少Statement。为了避免过多的折腾,你可以把这个值设为稍大于你应用中的PreparedStatements数量的一个数字。
这两个值中的任何一个大于0的话,statement池就会被开启。如果两个参数都大于0,它们的限制都会被强制执行。如果只有一个参数大于0,仅仅只有一个限制会被强制执行。
REF:
[url]http://cwiki.ossez.com/pages/viewpage.action?pageId=4719823[/url]