Używam hibernacji 3.2.2 w mojej aplikacji. Do łączenia połączeń używamy c3p0 0.9.1. Używam Generic DAO Pattern i Open Session w widoku, aby wykonać operację bazy danych.
Pracujemy nad nową stroną internetową istniejącej strony internetowej. Obecnie liczba odwiedzin to pół miliona odwiedzin strony w istniejącej aplikacji. Jestem zdezorientowany z konfiguracją c3p0. Na jakim poziomie porównawczym decyduję, że nie ma połączenia, które ma zostać otwarte. max-connection, min-connection, idletime, timeout itp ....Jak określić liczbę połączeń wymaganych w puli połączeń?
Odpowiedz
Najpierw musisz ustalić, co będzie robić puli, jeśli pojawi się żądanie i nie ma wolnego połączenia, aby go obsłużyć. Czy rzuca wyjątek? Zwraca wartość null? Blokować, dopóki nie zostanie zwrócone inne połączenie do puli?
Gdy już wiesz, co się stanie, gdy pojemność zostanie przekroczona, zastanów się, jak poradzić sobie z tym w kodzie wywołującym i w jakich sytuacjach jest to do przyjęcia. W pewnym momencie, gdy liczba połączeń rośnie, będziesz musiał zacząć odmawiać podania niektórych próśb, ale tylko Ty możesz zdecydować, co to jest. Rzeczywisty punkt zależy od wielu czynników, w tym takie rzeczy jak
- aktualnego biegu jałowym i zapracowanych stóp żądanie
- zmienność tych stawek (chcesz więcej „pokój oddychania” jeśli stopy skakać wokół partii)
- wszelkie przyszłe prognozy dotyczące zwiększenia mocy obliczeniowej w porównaniu z ulepszeniami sprzętu i budżetem programisty w budżecie na rewizję tego kodu (jeśli planujesz go uaktualnić za kilka miesięcy, potrzebujesz mniej narzutów, niż gdyby miał być uruchomiony dla kilka lat)
- wszelkie gwarancje, które Twoja firma zapewnia o mocy przerobowej
- zdolność klientów do zrozumienia żądań "spróbuj ponownie później" - np. Jeśli wiesz, że jest to automatyczny skrypt na drugim końcu, który śpi przez minutę na komputerze 503 i próbuje ponownie, to lepiej niż człowiek, który otrzyma komunikat "pojemność tymczasowo przekroczył" i oba są znacznie lepsze niż skrypt wsadowy, który otrzymuje 200 odpowiedzi i po prostu wychodzi z błędem.
- pilność żądań - niektóre prośby (oglądanie zdjęć kociąt) mogą być rozsądnie opóźnione, ale inne (zamówienia na giełdzie) mogą być bardzo wrażliwe na czas.
I tak dalej i tak dalej.
Mam nadzieję, że z powyższego powinieneś być w stanie wymyślić liczbę żądań, które muszą być w stanie przetwarzać jednocześnie (i jeśli istnieją różne typy typów żądania, być może będziesz musiał również wziąć to pod uwagę) . Następnie wystarczy spojrzeć na to, jak przychodzące żądania pobierają i używają połączeń, wnioskowania i profilowania, aż odkryjesz liczbę połączeń w puli, która jest wymagana do utrzymania docelowej stawki połączeń.
Nie zapomnij uwzględnić rzeczy takie jak wątki niezwiązane z żądaniami (np. Pule pracownicze), które pobierają własne połączenia z tej samej puli (pula musi być większa), a także żądania tylko utrzymujące połączenie dla części ich wykonanie (pula może być mniejsza).
Zaprezentuj swoje instancje testowe, dokonaj drobnych zmian w konfiguracji, a następnie weryfikuj z testowaniem obciążenia.
5 laks = 500 000, tak? –
tak. dziękuję .. zmieniłem go na pół miliona. – Shashi
Cześć Shashi. Możesz rzucić okiem na http://stackoverflow.com/questions/1208077/optimal-number-of-connections-in-connection-pool. –