在我正在处理的Java Web应用程序中,我们使用OracleConnectionPoolDataSource来实现数据库连接池功能。每个getConnection调用都包含用户的Oracle ID和密码。因此,每个用户在某种意义上都会拥有自己的数据库连接池。
目前我们正在使用大多数属性的默认值。这包括
有关这些属性的更多信息,请访问Connection Cache Properties。
我们目前没有任何明显的数据库连接问题,但认为性能可能会更好。我的问题是,在调整这些值时,我们应该考虑什么,有人有好的建议或资源。
答案 0 :(得分:6)
适用于10g第3版的Oracle应用服务器性能指南(10.1.3.1)提供了有关how to optimize the connection pool parameters的确切信息。
该信息对于涉及使用连接池管理Oracle数据库连接的应用程序的几乎所有方案都很有用,而不是使用正在使用的应用程序服务器。
例如,为最小池大小设置值始终是一个好习惯。就最大池大小而言,该值不应该过高,因为这可能会加载监听器,特别是如果应用程序倾向于不关闭连接导致泄漏。
最好为语句缓存设置合理的值,因为这样可以缓存预准备语句,从而提高性能。
还应考虑环境,选择超时。例如,在大多数情况下,连接等待超时不应为零,因为当在足够的时间间隔内无法在池中初始化物理连接时,这可能会导致SQLExceptions。不活动超时应足够大,以便只有在足够的不活动时间后才能关闭连接;太低的值会导致物理连接被太频繁地创建和丢弃。
编辑:“性能指南”中给出的指南适用于oracle.jdbc.pool.OracleDataSource类,这是Oracle 10g Application Server用于托管数据源到Oracle数据库的内容。其中大部分肯定会转移到OracleConnectionPoolDataSource。
答案 1 :(得分:5)
您是否考虑过使用新的Oracle UCP?引自11g feature list(强调我的):
1.4.1.29 JDBC的通用连接池(UCP)
JDBC的通用连接池取代了隐式连接缓存,并提供以下功能:
- 连接标签,连接收集,记录和统计
- 效果和稳定性增强
- 改进了诊断和统计信息或指标
UCP for JDBC提供高级连接池功能,改进的性能以及更好的连接问题可诊断性。
答案 2 :(得分:2)
我的第一条建议:简介。
我的第二条建议:简介。
什么会降低您的应用程序速度,哪种方法调用会导致您的应用程序性能受损?
您是否一直在等待创建新连接?然后将MinLimit设置为高于0,与“initial-limit”相同,以便您可以启动一些。如果您希望MaxLimit为无穷大,请将其设置为“0”,设置为0表示没有限制。
您是否应该使用现有但非活动的连接时创建新连接?将InactivityTimeout设置为0以外的值。对于AbandonedConnectionTimeout也是如此。
注意,我要修补的第一件事就是“初始限制” -
从Oracle了解初始限制
设置连接的大小 最初缓存时缓存 创建或重新初始化。当这个 property设置为更大的值 比0多,那是很多连接 预先创建并准备使用。 此属性通常用于 减少启动时的“加速”时间 缓存达到最佳大小。