设置和更新连接池(OracleConnectionPoolDataSource)属性以获得最佳性能

时间:2009-09-23 18:58:53

标签: java oracle connection-pooling

在我正在处理的Java Web应用程序中,我们使用OracleConnectionPoolDataSource来实现数据库连接池功能。每个getConnection调用都包含用户的Oracle ID和密码。因此,每个用户在某种意义上都会拥有自己的数据库连接池。

目前我们正在使用大多数属性的默认值。这包括

  • MinLimit 设置为0
  • MaxLimit 设置为Integer.MAX_VALUE
  • MaxStatementsLimit 设置为0
  • InactivityTimeout 设置为0
  • TimeToLiveTimeout 设置为0
  • AbandonedConnectionTimeout 设置为0
  • PropertyCheckInterval 设置为900
  • ConnectionWaitTimeout 设置为0

有关这些属性的更多信息,请访问Connection Cache Properties

我们目前没有任何明显的数据库连接问题,但认为性能可能会更好。我的问题是,在调整这些值时,我们应该考虑什么,有人有好的建议或资源。

3 个答案:

答案 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多,那是很多连接   预先创建并准备使用。   此属性通常用于   减少启动时的“加速”时间   缓存达到最佳大小。