连接和Statement是基于单个认证的。所以,如果一个连接池后端的数据源从[user=alice, password=secret1]和[user=bob, password=secret2]中获取连接的话,就相当于有两个不同的池,所以在最坏的情况下,数据源可能要管理两套maxPoolSize这么多数量的连接。
这个问题是数据源规范(它允许从多个用户认证中获取连接)造成的结果,并且同一个池中的连接在功能上必须是一致的。所以这个“问题”不会被改变或者修复。这里提出来只是为了让你弄清楚到底是怎么一回事。
Statement池的开销太大了。如果驱动不对PreparedStatement执行明显的预处理,Statement池的开销要大于它节省的时间。因此他默认是关闭的。如果你的驱动的确预处理了PreparedStatement,特别是通过IPC与RDBMS的话,你将可能会从中获得很明显的性能提升。
(通过把maxStatements或maxStatementsPerConnection的配置属性设置成比0大的数)
REF:http://cwiki.ossez.com/pages/viewpage.action?pageId=4719845