Temat: oracle benchmarks
Aleksander Mathias:
Dzięki za podpowiedzi. Marcin, tak zdaję sobie sprawę, że jednak wygenerowane obciążenie jest całkiem inne niż to przy normalnej pracy userów i 100% później będzie spychologia :). Aplikacja już istnieje więc zobaczę te narzędzia, które zaproponowałeś. Tylko jeszcze pytanie jak analizować wyniki tych testów, bo wynikiem będą czasy wykonania testów dla dajmy na to 100 userów, 1000 userów i 10000 userów, no ale jak to przełożyć na wymagania sprzętowe?
Nie wybrałeś łatwego tematu więc nie ma łatwej odpowiedzi ;-)
Jeśli rzeczywiście chcesz to zrobić bardzo dokładnie to chyba nie obędzie się
bez Database Replay. Myślę, że warto zrobić mały research czy, jak pisał Bartosz,
można tego używać przez jakiś czas for free.
>Co obserwować? Jeżeli pod
spodem mam 4 procki, macierz z 16 dyskami w RAIDzie 10, to wszystkie testy będą się odnosiły do tego sprzętu. Dla 10000 userów czas wykonania wzrośnie 15x względnie pierwszego testu z setką userów, ale jak przewidzieć, że dokładając do macierzy kolejne 48 dysków już czas będzie krótszy o 10x, albo dokładając 2 procesory coś tam się nam skróci?!
IMHO nie nastawiałbym się na wyciągnięcie takich łatwych wniosków.
Tak jak Marcin pisał, systemy się skalują ale nie liniowo.
Jeśli w aplikacji/systemie będzie miał np.: lock contention
to żadnego zasobu nie będziesz miał wysyconego a i tak system nie będzie
działał szybko.
Przy testach na pewno zauważę co jest obciążona i to pewnie będą dyski - obciążenie 100%, ale jak z tego wyciągać wnioski?
Wniosek jest jeden: że dyski są obciążone w 100%. Koniec. Kropka. ;-)
Pytanie co z taką informacją teraz zrobisz.
Czy chcesz zmniejszyć ich obciążenie ? Jeśli tak to na czym storage spędza najwięcej czasu: odczyty czy zapisy ? Jeśli odczyty to ...(pewna ścieżka działania)... a jesli zapisy to ...(inna ścieżka działania)...
Diabeł tkwi w szczegółach.
Swoją drogą jakaś podpowiedź o widokach w bazie które pokażą mi liczbę IOPS, albo coś w tym stylu? Na AWRze mam przybliżoną liczbę operacji, ale jak to sprawdzić w czasie rzeczywistym?
Tomasz, z tego co mi wiadomo to samo EE nie wystarczy żeby mieć replay'a (to po rozmowie z handlowcem Oracle'a, a dzisiaj jeszcze sprawdzę w docu od licencjonowania.
Albo spróbujesz podejść całościowo (np. Database Replay, HP Load Runner - osobiście nie używałem) albo spróbujesz testować poszczególne komponenty (storage, CPU, itp).
Jeśli chodzi o CPU to chłopaki już pisali co można używać (SLOB, swingbench). Wspomnę jeszcze o Hammerora. Na przykładzie tego ostatniego (używaliśmy go) powiem, że jeśli nie masz warunków i możliwości niekoniecznie musisz testować całość. Innymi słowy: lepszy rydz niż nic ;-) W naszym przypadku nie mieliśmy możliwości przetestować całości aplikacji przenosząc ją na inną platformę więc wybraliśmy ten element aplikacji, który jest najistotniejszy dla wydajności (u nas np.: składanie zamówień bo dzięki nim business się kręci ;-)) i ten element testowaliśmy do bólu bo on był dla nas najważniejszy. Dobrze by było określić najbardziej priorytetowy element aplikacji i jego testować. Hammerora u nas się sprawdził przy generowaniu zamówień ale przy innych elementach niekoniecznie.
Oczywiście zamiast 'Hammerora' można wstawić SLOB, Swingbench itp. O ile dobrze pamiętam Swingbench też ma opcje OLTP, DW i można sobie dobrać to co jest najbliższe Twojej aplikacji.
Jeśli chodzi o storage benchmarking to jest wiele różnych opcji (znacznie więcej niż przy testowaniu CPU) ale osobiście polecam parę Vdbench + Swing (sam używam regularnie zwłaszcza vdbencha).
Swing pozwala nagrać produkcyjne (real life) obciążenie (na poziomie OS-a) a vdbench pozwala je odtworzyć na innym systemie (oczywiście traktuje ten storage jako raw bo musi wszyskie seek-i również odtworzyć tak więc raczej rób test na pustym storage). Również jeśli chcesz sprawdzić jak się zachowa storage gdy zwiększysz obciążenie to po prostu zwiększasz jeden parametr (np. x2) i wtedy vdbench próbuje to samo odtworzyć ale dwa razy szybciej (a Ty w tym czasie obserwujesz dyski). Polecam.
Generalnie jeśli nie jestem w stanie przetestować całości to staram się wybrać najważniejszy element aplikacji i spróbować znaleźć narzędzie, które jest (w sensie testów) _najbliżej_ temu elementowi. W większości przypadków do działa.