相关疑难解决方法(0)

我应该激活c3p0语句汇集吗?

我们正在运行java6/hibernate/c3p0/postgresql堆栈.我们的JDBC驱动程序是8.4-701.jdbc3

我有一些关于准备陈述的问题.我读过有关准备陈述的优秀文件

但是我仍然有一个问题如何使用postgresql配置c3p0.

目前我们有

 c3p0.maxStatements = 0
 c3p0.maxStatementsPerConnection  =   0
Run Code Online (Sandbox Code Playgroud)

根据我的理解,准备好的语句和语句池是两个不同的东西:

我们的hibernate堆栈使用预处理语句.Postgresql正在缓存执行计划.下次使用相同的语句时,postgresql会重用执行计划.这节省了DB内部的时间规划语句.

另外,c3p0可以缓存"java.sql.PreparedStatement"的java实例,这意味着它正在缓存java对象.因此,当使用
c3p0.maxStatementsPerConnection = 100时,它最多可以缓存100个不同的
对象.它节省了创建对象的时间,但这与postgresql数据库及其预处理语句无关.

对?

当我们使用大约100个不同的语句时,我会设置c3p0.maxStatementsPerConnection = 100

但是c3p0文档在c3p0中已经说明了已知的缺点

语句池的开销太高.对于未对PreparedStatements执行重要预处理的驱动程序,池化开销超过任何节省.因此,默认情况下关闭语句池.如果您的驱动程序确实预处理PreparedStatements,特别是如果它通过IPC与RDBMS这样做,您可能会通过打开语句池来看到显着的性能提升.(通过将配置属性maxStatements或maxStatementsPerConnection设置为大于零的值来执行此操作.).

那么:使用c3p0和Postgresql激活maxStatementsPerConnection是否合理?激活它真的有益吗?

亲切的问候Janning

postgresql c3p0

18
推荐指数
1
解决办法
9561
查看次数

标签 统计

c3p0 ×1

postgresql ×1