关闭连接后,Oracle会话保持打开状态

时间:2011-11-02 13:22:27

标签: oracle c#-2.0

在测试新应用程序时,我们遇到了一个问题,有时存储过程需要超过1分钟才能执行并导致超时。特别是它不是1个存储过程,它可以是任何。

尝试重现这个问题我创建了一个小型(本地)testapp,它在不同的线程中调用相同的存储过程(下面的代码)。

现在似乎Oracle会话仍在那里。非活动。并且Oracle服务器的CPU达到100%。 我使用System.Data.OracleClient

我不确定一个是否与另一个相关,但它减慢了从数据库获得答案所需的时间。

for (int index = 0; index < 1000; ++index)
{
    ThreadPool.QueueUserWorkItem(GetStreet, index);
    _runningThreads++;
    WriteThreadnumber(_runningThreads);
}

private void GetStreet(object nr)
{
    const string procName = "SPCK_ISU.GETPREMISESBYSTREET";
    DataTable dataTable = null;
    var connectionstring = ConfigurationManager.ConnectionStrings["CupolaDB"].ToString();
    try
    {
        using (var connection = new OracleConnection(connectionstring))
        {
            connection.Open();
            using (var command = new OracleCommand(procName, connection))
            {
                //Fill parameters
                using (var oracleDataAdapter = new OracleDataAdapter(command))
                {
                    //Fill datatable
                }
            }
        }
    }
    finally
    {
        if (dataTable != null)
            dataTable.Dispose();
    }
}

修改 我只是让dba计算开放会话,并且有105个会话保持开放 - 不活动状态。关闭我的申请后,会议将被删除。

1 个答案:

答案 0 :(得分:1)

问题解决了。

我们聘请了一位Oracle专家来研究这个问题,这个问题是由于一些基础存储过程导致执行并消耗了大量CPU所致。

经过必要的调整后,一切都顺利进行。