在测试新应用程序时,我们遇到了一个问题,即存储过程有时需要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个会话保持开放状态。关闭我的应用程序后,会话被删除。