2016-09-22 67 views
9

Mam aplikację Mule, która łączy się z bazą danych Oracle. Aplikacja jest interfejsem SOAP, które umożliwia wykonywanie procedur składowanych SQL. Mój konektor jest skonfigurowany do korzystania z łączenia połączeń i monitorowałem same połączenia. Mam maksymalny rozmiar puli równy 20, a podczas wykonywania połączeń z bazą danych widzę, jak otwierają się (netstat -ntl | grep PORTNUMBER).Zamknij połączenia z bazą danych po nieaktywności

tcp4  0  0 IP HERE  OTHER IP HERE  SYN_SENT 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  10  0 IP HERE  OTHER IP HERE  ESTABLISHED 

Po zakończeniu połączeń oczekuję, że połączenia zostaną zamknięte po upływie określonego czasu. Tak się nie stało. Zauważyłem, że gdy aplikacja działała na serwerze, połączenia były nadal otwarte od lipca (to kilka miesięcy temu).

Jedynym sposobem, jaki znalazłem do tej pory, że faktycznie zamyka połączenia po kilku sekundach, jest włączenie transakcji XA i ustawienie limitu czasu połączenia. Jednak całkowicie zakłóca to wydajność aplikacji i jest niepotrzebne narzut.

Jak powinienem dodać taki limit czasu bez korzystania z połączeń XA? Chciałbym, aby moje połączenia z bazą danych zostały zamknięte po 20 sekundach bezczynności.

Dziękuję

Edit: Generic złącze baza danych jest używana - Mule wersja 3.8.0 Mamy maksymalną liczbę połączeń, które są dopuszczone do bazy danych, mamy wiele instancji tego biegu przepływu. Oznacza to, że połączenia są zarezerwowane przez jedną z instancji, co powoduje, że inne instancje nie mogą uzyskać nowych połączeń.

Specyficznym problemem, który mieliśmy, było to, że jedna instancja nadal miała zarezerwowane 120 połączeń, mimo że ostatni raz działała kilka tygodni wcześniej. Gdy druga instancja zażądała więcej połączeń, mogła uzyskać tylko 30, ponieważ maksymalna po stronie bazy danych wynosi 150.

Odpowiedz

0

Możesz spróbować użyć Oracle Transparent Connection Caching, jeśli nie będziesz miał szczęścia z Mule.

Kilka pytań do zrozumienia sprawy lepiej:

  1. jaki typ złącza używasz (JDBC/bazy danych) i która wersja jest taka, że ​​muł?
  2. dlaczego zależy ci na otwartym połączeniu? obserwujesz inne objawy, z których nie jesteś zadowolony?
+1

Edytowałem moje pytanie. – DenCowboy

0

Połączenia z bazami danych za pośrednictwem JDBC mają pozostać otwarte z zamiarem ponownego ich wykorzystania. Ogólnie rzecz biorąc, większość technologii baz danych, w tym baz danych nowej generacji NoSQL, ma drogie koszty uruchamiania i wyłączania. Połączenia z bazami danych powinny być ustanowione podczas uruchamiania aplikacji i zamknięte z wdziękiem przy wyłączaniu aplikacji. Nie powinieneś zamykać połączeń po każdym użyciu.

Firma Oracle oferuje pulę połączeń o nazwie UCP. UCP oferuje opcje kontroli stale connections, która obejmuje ustawienie maksymalnego czasu ponownego użycia i nieaktywnego limitu czasu połączenia między innymi opcjami.

Może to być przydatne do zwracania zasobów do aplikacji, a także sprawdzania przerwanych połączeń. Bez względu na to, połączenia powinny być wielokrotnie wykorzystywane przed zamknięciem.

+0

Jestem świadomy, że połączenia nie powinny być zamykane po każdym użyciu i mogą być ponownie użyte przy użyciu puli. – DenCowboy