0
在測試新應用程序時,我們遇到了一個問題,即有時存儲過程需要1分鐘才能執行並導致超時。特別是它不是一個存儲過程,它可以是任何存儲過程。Oracle會話在關閉連接後保持開放
試圖重現問題我創建了一個小的(本地)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次會議。關閉我的應用程序後,會話被刪除。
對不起,但是......你在哪裏關閉連接? – m0skit0
關閉連接後會話保持打開的事實很可能是由於您啓用了連接池,這是默認連接池。超時是在一段固定的時間之後發生還是會發生變化? – Mike
它由使用塊完成。這關閉和配置連接。 – Koen