2009-09-23 49 views
7

在我正在开发的Java Web应用程序中,我们使用OracleConnectionPoolDataSource来实现数据库连接池功能。每个getConnection调用都包含用户的Oracle ID和密码。因此,每个用户在某种意义上最终都会有自己的数据库连接池。设置和更新连接池(OracleConnectionPoolDataSource)以获得最佳性能

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

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

有关这些属性的更多信息可以在Connection Cache Properties找到。

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

回答

6

Oracle应用服务器性能指南(适用于10g第3版)(10.1.3.1)提供有关how to optimize the connection pool parameters的确切信息。

这些信息对于几乎所有场景都很有用,涉及使用连接池管理到Oracle数据库的连接的应用程序,而不是正在使用的应用程序服务器。

例如,为最小池大小设置一个值总是一个好习惯。就最大游泳池尺寸而言,该值不应该过高,因为这可能会加载听众,特别是如果应用程序倾向于不关闭连接导致泄漏。

最好为语句缓存设置一个合理的值,因为这样可以缓存预准备语句,从而提高性能。

超时也应选择与环境考虑。例如,在大多数情况下,连接等待超时不应该为零,因为在足够的时间间隔内无法在池中初始化物理连接时,可能会导致SQLException。不活动超时应足够大,以便仅在足够长的不活动时间后才能处理连接。如果值太低,则会导致物理连接的创建和删除太频繁。

编辑:性能指南中给出的指导适用于oracle.jdbc.pool.OracleDataSource类,这是Oracle 10g应用服务器用于托管数据源到Oracle数据库的内容。它绝大部分肯定会继承到OracleConnectionPoolDataSource。

+0

InactivityTimeout: 当InactivityTimeout过期时,基础物理连接关闭。但是,如果已设置,则不允许缓存大小缩小到minLimit以下。 - 这是Oracle文档,并说,如果所有的连接对象由超时关闭minLimit甚至不会缩水。这是否意味着它允许陈旧的物体住在游泳池内? http://docs.oracle.com/cd/B14117_01/java.101/b10979/conncache.htm#CDEBCBJC –

2

我的第一条建议:配置文件。

我的第二条建议:配置文件。

什么是减慢你的应用程序,哪些方法调用导致你的应用程序性能受损?

你是否一直在等待创建新的连接?然后将您的MinLimit设置为高于0,与'初始限制'相同,以便您有几个可用的开始。如果您希望MaxLimit为无穷大,请将其设置为“0”,设置为0表示无限制。

当您真的应该使用现有的非活动连接时,您是否正在创建新的连接?将您的InactivityTimeout设置为除0之外的值。对于AbandonedConnectionTimeout也一样。

注意,我会鼓捣的第一件事将是“初始limit'-

从甲骨文大约初始上限

这将设置连接 高速缓存的大小时,高速缓存最初是 创建或重新初始化。当此 属性设置为大于 的值时,该许多连接是 预先创建并准备使用。 此属性通常用于减少在启动 缓存时其“最佳”大小的“缓升”时间。

5

您是否考虑过使用新的Oracle UCP?从11g feature list(重点煤矿)引用:

为JDBC

1.4.1.29通用连接池(UCP) 为JDBC

通用连接池取代隐含连接高速缓存,并提供了以下功能:

  • 连接标签,连接收获,日志记录和统计
  • 性能和稳定增强
  • 改进的诊断和统计数据或指标

UCP的JDBC提供先进的连接池的功能,提高性能和连接问题更好的诊断能力。

+2

我喜欢这个答案。很抱歉,我们目前无法升级到新的驱动程序。 – Prof

+1

你应该考虑它。 IIRC Oracle DataSource的池功能已被弃用,以支持使用UCP。 – yawn

相关问题