При тестировании нового приложения мы столкнулись с проблемой, что иногда хранимый процесс выполняется более 1 минуты и приводит к тайм-ауту.Это был не 1 хранимый процесс, в частности, это может быть любой.
Пытаясь воспроизвести проблему, я создал небольшой (локальный) testapp, который вызывает один и тот же хранимый процесс в разных потоках (код ниже).
Теперь кажется, что Oracle-сессии все еще там.Неактивный.И процессор Oracle-сервера поражает 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();
}
}
EDIT: Я просто позволил dba подсчитать количество открытых сессий, и есть 105 сессий, которые остаются открытыми-неактивными.После закрытия моей заявки сеансы удаляются.