2012-08-13 54 views
0

我们的.NET Web应用程序使用ODP.NET进行连接,并且其用于连接到数据库的Oracle用户是“webuserOracle”。该Web应用程序始终关闭连接并处理连接。由.NET Web应用程序生成的Oracle会话和进程

但是,在我们的Oracle 10g数据库中,我们看到Oracle用户“webuserOracle”的会话和流程值始终很高,因为它们没有关闭或死亡。

我们已决定在“webuserOracle”的Oracle配置文件上设置,以限制连接时间长达5分钟。

CREATE PROFILE profile_webuserOracle LIMIT CONNECT_TIME 5; 

ALTER USER webuserOracle PROFILE profile_webuserOracle; 

问:

对于Web应用程序,限制连接到5分钟,这意味着用户可以互动,比如说,与Web应用程序2小时。 5分钟的限制仅适用于触发的事件(如单击按钮)以连接到数据库。 5分钟,一切Con.Open和Con.Dispose之间发生了:

Dim con As OracleConnection = oraConexion() 
con.Open() 
''' There'll be a limit of 5 minutes to run the code here 
con.Close() 
con.Dispose() 

回答

1

在配置文件中设置一个CONNECT_TIME为Web应用程序很可能是一个非常糟糕的主意。

首先,一般来说,三层应用程序将利用中间层的连接池。这意味着中间层服务器会打开一个连接到数据库的连接池,并保持长时间的打开状态,并根据需要分配给Web会话。这意味着单击网站的单个Web用户可能会在每次点击时获得不同的数据库会话,并且单个数据库会话将被大量Web用户使用。

如果您为您的连接池连接的CONNECT_TIME

  • 中间层很可能不断出现错误,它从连接池获得的特定连接已经超过其允许的连接时间。您可以通过让中间层对从池中获取的每个连接执行一个虚拟查询(即select 1 from dual)以确认交互开始之前5分钟未过去,但无法保证超时在页面上运行第一个查询时将不会被触及。
  • 中间层将不断打开到数据库的新物理连接(一个相当昂贵的过程),以替换已关闭的连接,因为它们已打开5分钟。这些连接风暴可能会给数据库带来很大负担。这也会为应用程序带来性能问题,因为用户一直在等待新的物理连接被打开,而不能重用池中的连接。
  • 如果进行此更改,会话和进程的数量可能会更高。中间层将保持其需要服务用户的许多真实物理连接以及多个过期连接,这些连接只是为了通知下一个呼叫者它们已到期。

你试图解决什么是真正的问题?中间层维护一个不关闭的数据库连接池是非常正常的。这是完全正常和健康的。如果您想减少任何时候打开的连接数,则可以调整中间层服务器上的连接池设置。

相关问题