Oracle 连接未关闭

bab*_*dev 5 oracle connection-pooling odp.net

我们有使用 odp.net 连接到 oracle 数据库的 ASP.NET 应用程序。

最近我们开始遇到一些性能问题。似乎 Oracle 连接不会关闭并最终堆积起来,直到它使我们的网站崩溃。

作为第一步,我们进行了代码审查,并确保在执行后关闭所有打开的连接。

OracleConnection cn = Helpers.ConnectToDB();
    try
    {

        cn.Open();
        //do somtehing
    }
    catch (Exception ex)
    {
        //log error
    }
    finally
    {
        cn.Close();
        cn.Dispose();
    }
Run Code Online (Sandbox Code Playgroud)

但这无济于事,每隔几个小时,连接就会堆积起来,使我们的网站崩溃。

这是昨天的连接日志:

TO_CHAR(DATE_TIME,'DD/MM/YYYY   MACHINE STATUS  CONNECTIONS 
19/01/2012 14:40:03 WORKGROUP\OTH-IIS-1 ACTIVE  1   
19/01/2012 14:38:00 WORKGROUP\OTH-IIS-1 ACTIVE  2   
19/01/2012 14:35:57 WORKGROUP\OTH-IIS-1 ACTIVE  2   
19/01/2012 14:34:55 WORKGROUP\OTH-IIS-1 ACTIVE  28  
19/01/2012 14:33:54 WORKGROUP\OTH-IIS-1 ACTIVE  26  
19/01/2012 14:31:51 WORKGROUP\OTH-IIS-1 ACTIVE  34  
19/01/2012 14:30:49 WORKGROUP\OTH-IIS-1 ACTIVE  96  
19/01/2012 14:29:47 WORKGROUP\OTH-IIS-1 ACTIVE  73  
19/01/2012 14:28:46 WORKGROUP\OTH-IIS-1 ACTIVE  119 
19/01/2012 14:27:44 WORKGROUP\OTH-IIS-1 ACTIVE  161 
19/01/2012 14:26:43 WORKGROUP\OTH-IIS-1 ACTIVE  152 
19/01/2012 14:25:41 WORKGROUP\OTH-IIS-1 ACTIVE  109 
19/01/2012 14:24:40 WORKGROUP\OTH-IIS-1 ACTIVE  74  
19/01/2012 14:23:38 WORKGROUP\OTH-IIS-1 ACTIVE  26  
19/01/2012 14:22:36 WORKGROUP\OTH-IIS-1 ACTIVE  2   
19/01/2012 14:21:35 WORKGROUP\OTH-IIS-1 ACTIVE  2
Run Code Online (Sandbox Code Playgroud)

崩溃点发生在 14:27:44,重新启动应用程序后,连接开始下降。

我们使用的连接字符串是:

<add name="OracleRead" connectionString="Data Source=xxx;User Id=yyy;Password=zzz;Max Pool Size=250;Connection Timeout=160;" providerName="Oracle.DataAccess"/>
Run Code Online (Sandbox Code Playgroud)

那么这里的问题是什么?

我们是否需要定义或更改以下属性之一:

Connection Lifetime, Decr Pool Size, Max Pool Size, Min Pool Size?
Run Code Online (Sandbox Code Playgroud)

在这种情况下推荐的设置是什么?

Joe*_*orn 1

确保将所有连接包装在 try/finally 块中。仅仅为每个 .Open() 调用 .Close() 是不够的。您必须将.Close() 调用放在finally 块中。最简单的方法是使用 using 块创建连接。