在测试新应用程序时,我们遇到了一个问题,有时存储过程需要超过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个会话保持开放 - 不活动状态。关闭我的申请后,会议将被删除。
答案 0 :(得分:1)
问题解决了。
我们聘请了一位Oracle专家来研究这个问题,这个问题是由于一些基础存储过程导致执行并消耗了大量CPU所致。
经过必要的调整后,一切都顺利进行。