Próbuję skonfigurować buforowanie połączeń dla mojej aplikacji .NET przy użyciu wersji ODP.NET 2.111.6.20. Baza danych to Oracle 11.1.Parametry grupowania połączeń ODP.NET
Używam następujący ciąg połączenia w mojej aplikacji .NET 2.0:
Data Source=prod; User Id=FAKE_USER; Password=FAKE_PASS; Pooling=true; Min Pool Size=2; Max Pool Size=5; Connection Timeout=30;"
Zgodnie z dokumentacją pula powinna zainicjować połączenie z 2 przyłączami i i przyrost do 5 połączeń w zależności od potrzeb. Nigdy nie powinno przekroczyć 5 połączeń.
To, co widzę, to to, że połączenia rosną 2 naraz i dorastają do 10 połączeń. Monitoruję połączenia w bazie danych Oracle, przesyłając kwerendę do tabeli sesji v $, więc wiem, że połączenia pochodzą z konkretnej aplikacji pochodzącej z mojej aplikacji.
Jeśli ktoś może mi pomóc określić, co może się dziać w puli połączeń w tej aplikacji, która może pozwolić na więcej niż maksymalna liczba połączeń, byłbym wdzięczny.
Próbka C# Code
Oto przykład kodu dokonywania połączeń do bazy danych:
const string connectionString = "Data Source=prod; User Id=FAKE_USER; Password=FAKE_PASS; Pooling=true; Min Pool Size=5; Max Pool Size=5; Connection Timeout=30;";
using (OracleConnection connection = new OracleConnection(connectionString)) {
connection.Open();
using (OracleCommand command = new OracleCommand("ALTER SESSION SET TIME_ZONE='UTC'", connection)) {
command.ExecuteScalar();
}
using (OracleTransaction transaction = connection.BeginTransaction()) {
const string procSql = @"BEGIN P_SERVICES.UPDATE_VERSION(:id, :version, :installDate); END;";
using (OracleCommand command = new OracleCommand(procSql, connection)) {
command.Parameters.Add(new OracleParameter("id", OracleDbType.Varchar2) { Value = id });
command.Parameters.Add(new OracleParameter("version", OracleDbType.Varchar2) { Value = version });
command.Parameters.Add(new OracleParameter("installDate", OracleDbType.TimeStamp) { Value = dateUpdated });
try {
command.ExecuteNonQuery();
} catch (OracleException oe) {
if (Log.IsErrorEnabled) {
Log.ErrorFormat("Update Error: {0}", oe.Message);
}
throw;
}
transaction.Commit();
}
}
}
Czy możesz podać przykład wykonania poleceń? Dobrze byłoby sprawdzić, czy używasz "UŻYWANIA" lub czy ręcznie tworzysz/usuwasz swoje połączenia/komendy –
Zobacz aktualizację oryginalnego wpisu dla próbki kodu ... jak widzisz Używam wyciągów w kod zamiast ręcznego zamykania disposing the connections – jprincipe
Mój zestaw Oracle.DataAccess to 4.112.3.0, czy to ten sam zespół, który posiada wersję 2.111.6.20? Jeśli tak, może czas zaktualizować. Chyba że jesteś ograniczony do wersji .NET 4 i nie możesz? –