Zapytania o protokoły profilowania

Wprowadzenie

W tym artykule opisane jest zarówno korzystanie z profilowania, jak i użycie aplikacji Zapytania o protokoły profilowania, za pomocą której możliwa jest analiza protokołów profilowania. Ponadto opisane jest dokowalne okno Profilowanie, które umożliwia aktywowanie oraz dezaktywowanie profilowania bezpośrednio z poziomu interfejsu użytkownika. Dokowalne okno Profilowanie stanowi alternatywę dla uruchamiania narzędzia Praca z profilowaniem.

Profilowanie umożliwia w szczególności rejestrowanie w protokole:

  • dostępów do bazy danych

  • pojedynczej akcji

  • ograniczonej sekwencji akcji

Na podstawie zarejestrowanych danych możliwa jest identyfikacja słabych punktów w implementacji analizowanych akcji.

Protokoły profilowania powinny być wykorzystywane w celu zapewnienia jakości oraz optymalizacji wydajności w systemie deweloperskim lub w systemie testów deweloperskich. W przypadku wystąpienia nagłego problemu z wydajnością w systemie produkcyjnym, który można zawęzić do konkretnej akcji, dopuszcza się również wykorzystanie protokołów profilowania na tym środowisku.

Grupa docelowa

  • Programiści aplikacji
  • Konsultanci techniczni

Opis

Do analizy wydajności aplikacji kluczowe znaczenie mają przede wszystkim rodzaj i liczba odwołań do Persistence service, ponieważ zakłada się, że to one generują największą część kosztów wydajnościowych. W szczególności odwołania te są silnie zależne od kontekstu i zazwyczaj rozproszone na dowolną liczbę stale zmieniających się wątków. Ogólne narzędzie do profilowania albo nie byłoby w stanie ich jednoznacznie rozróżnić, albo wymagałoby stosunkowo dużego nakładu konfiguracji po stronie profilera. Z tego względu opracowano specjalny profiler dla Persistence service.

Comarch ERP Enterprise Profiler

Opracowany profiler rejestruje dla serwera aplikacyjnego akcje Persistence service i działa według następujących kroków:

  • utworzenie pliku z danymi profilowania

  • analiza pliku

Profiler nie umożliwia zatem natychmiastowej analizy danych profilowania. Najpierw profiler musi utworzyć plik z danymi profilowania i zakończyć rejestrowanie, dopiero potem dane zawarte w pliku mogą zostać poddane analizie. W pliku rejestrowane są wszystkie lub wybrane akcje.

Rejestrowane są następujące akcje Persistence service:

  • wywołanie CisObjectManager.getObject
  • wywołanie CisObjectManager.getObjectIterator
  • wywołanie CisObjectManager.getResultSet
  • wywołanie CisObjectManager.getObjectArray
  • dostęp do bazy danych (DatabaseAccess)
  • otwarcie transakcji (TransactionBegin)

  • zapytania o blokady (AcquireLock)

Każda akcja jest wykonywana w określonym kontekście. Kontekst ten posiada z kolei kontekst nadrzędny, w wyniku czego akcja jest osadzona w hierarchii kontekstów. Poniższe konteksty są w dużej mierze zdefiniowane przez architekturę systemu ERP:

Serwer aplikacji
Protokół profilowania jest przypisany dokładnie do tego serwera aplikacji systemu ERP, na którym uruchomiono profilowanie.

Sesja
Sesja może zostać otwarta wyłącznie w kontekście serwera aplikacji systemu ERP, tzn. sesja należy do konkretnego serwera aplikacji systemu ERP.

Instancja aplikacji
Instancja aplikacji może zostać otwarta wyłącznie w kontekście sesji, tzn. aplikacja należy do sesji. Kontekst ten określany jest jako kontekst aplikacji.

Transakcja
Transakcja może zostać otwarta wyłącznie w kontekście sesji lub aplikacji, tzn. transakcja należy albo do aplikacji, albo do sesji.

Funkcja aplikacji
Funkcja aplikacji może zostać otwarta wyłącznie w kontekście aplikacji, tzn. funkcja aplikacji należy do aplikacji. Kontekst ten określany jest jako kontekst funkcji.

Wszystkie akcje Persistence service są zawsze rejestrowane w kontekście transakcji. Za pomocą komponentu analitycznego, aplikacji Zapytanie o protokoły profilowania, wszystkie akcje mogą być agregowane na dowolnym poziomie szczegółowości.

Profilowanie mierzy przede wszystkim operacje według ich złożoności, a nie czasy wykonania. Pomiar czasu jest mało celowy, ponieważ obejmuje również właściwości środowiska pomiarowego, a wyniki uzyskane w różnych środowiskach testowych są słabo porównywalne. Ponieważ jednak znany jest nakład związany z poszczególnymi operacjami, liczba operacji dostarcza co najmniej tak samo wartościowej informacji jak czas wykonania.

Uwaga
Jeżeli protokoły profilowania są rejestrowane w systemie produkcyjnym, należy uruchamiać je wyłącznie na specjalnie do tego przeznaczonym serwerze aplikacji systemu ERP. Serwer ten nie powinien realizować żadnych innych funkcji poza rejestrowaniem protokołów profilowania. Wydajność serwera aplikacji systemu ERP jest znacząco obniżana podczas rejestrowania protokołów profilowania. Na systemach innych niż deweloperskie dodatkowo wymagana jest specjalna, administracyjna zdolność do rejestrowania protokołów profilowania. Szczegóły w rozdziale Możliwości specjalne.

Funkcje aplikacji

Zazwyczaj w obrębie aplikacji tylko określone obszary są istotne z punktu widzenia profilowania. Oznaczenie takiego obszaru umożliwia jego szczególne wyróżnienie w protokole profilowania dla danego zapisu profilowania, dzięki czemu można precyzyjnie ustalić, jakie akcje oraz w jakiej liczbie zostały wykonane w ramach danego obszaru.

Aby obszary, które mają być w protokole wyróżnione, były widoczne dla profilera, do dyspozycji są metody profilingBegin oraz profilingEnd w CisApplicationManager. Metody te służą do oznaczenia początku i końca obszaru oraz do nadania nazwy obszarowi.

Przykład

CisApplicationManager am;

byte[] prfValidate;

am = CisEnvironment.getInstance().getApplicationManager();

prfValidate =

am.profilingBegin(this.getClass().getName()+”:validate”);

try {

} finally {

am.profilingEnd(prfValidate);

}

Funkcje aplikacji są podporządkowane aplikacji. Każda akcja jest podczas analizy liczona zarówno w kontekście aplikacji, jak i w odpowiednim kontekście funkcji. Przy wyłączonym profilowaniu wywołanie metod powoduje tak niewielki narzut czasowy, że może ono pozostać również w kodzie produkcyjnym.

Wprowadzenie funkcji aplikacji jest jedyną możliwością grupowania zliczeń według funkcjonalności aplikacji.

Rozpoczęcie profilowania

Profilowanie można uruchomić na różne sposoby w celu zarejestrowania protokołu profilowania. W wyniku rejestracji tworzony jest plik, który może zostać poddany analizie w aplikacji Zapytanie o protokoły profilowania.

Narzędzie Praca z profilowaniem (wrkprf)

Profiler jest sterowany za pomocą polecenia toolshell wrkprf.

Najważniejsze parametry:

  • wrkprf -start:<nazwa pliku> – uruchamia profilowanie na serwerze aplikacji systemu ERP i zapisuje dane w pliku (np. wrkprf -start:c:\temp\profiling.dat).
  • wrkprf -stop – zatrzymuje profilowanie na serwerze aplikacji systemu ERP i zwalnia plik profilowania.

Po uruchomieniu profilera dane dla każdej nowej sesji są rejestrowane, tzn. należy zalogować się do serwera aplikacji systemu ERP za pośrednictwem nowego okna przeglądarki.

Uwaga
Plik dziennika profilowania jest przechowywany na lokalnym nośniku danych serwera aplikacji systemu ERP. Dlatego przy wyborze nazwy pliku należy upewnić się, że ważne pliki lokalne nie zostaną niepotrzebnie nadpisane.
Uwaga
Aplikacja Zapytanie o protokoły profilowania powinna być otwarta na serwerze aplikacji systemu ERP, który utworzył dziennik profilowania. Nie należy aktywować profilowania na serwerze aplikacji systemu ERP, na którym użytkownicy pracują.

Jeśli mierzona ma być tylko określona funkcjonalność programu bez definiowania funkcji aplikacji, profilowanie można zatrzymać i wznowić. Do tego celu służą następujące polecenia:

  • wrkprf -pause – rejestrowanie działań jest zawieszone.
  • wrkprf -resume – rejestrowanie akcji jest wznawiane.

Polecenia te mogą być wykonywane dowolną liczbę razy. Umożliwia to uruchomienie aplikacji poprzez interfejs użytkownika aż do mierzonego obszaru, a następnie celowe włączenie profilowania wyłącznie dla wyróżnionego obszaru.

Analiza protokołu profilowania odbywa się za pomocą aplikacji Zapytanie o protokoły profilowania.

Uwaga
Jeżeli zachodzi potrzeba przetestowania nowo opracowanego kodu bez jego natychmiastowego włączania do aplikacji, pomocny jest parametr -attachToolshell tego narzędzia. Umożliwia on uruchamianie i rejestrowanie dowolnego kodu za pomocą klasy pomocniczej zawierającej metodę main.

Okno dokowane Profilowanie

Okno dokowalne Profilowanie umożliwia uruchomienie profilowania z poziomu interfejsu użytkownika i tym samym wygenerowanie protokołu profilowania. Okno to jest niezależne od aplikacji Zapytanie o protokoły profilowania i jest ogólnie dostępne, o ile została przyznana odpowiednia zdolność uprawniająca do jego użycia. Szczegóły w rozdziale Możliwości specjalne.

Okno dokowalne zawiera elementy opisane w następujących rozdziałach:

Pola

Pole Objaśnienie
Protokół profilowania W polu Protokół profilowania należy wprowadzić nazwę pliku wraz ze ścieżką dostępu dla rejestrowanego protokołu lub wybrać już istniejący plik za pomocą pomocy wartości. Należy zwrócić uwagę, że plik jest zapisywany w Knowledge Store, a ścieżka pliku ma następujący wzorzec: kstore://{baza_danych}/{folder}/{nazwa_pliku}
Uwaga
Zalecany jest format pliku .dat.
Akcje W tym polu wybiera się, które akcje mają być rejestrowane.Dostępne są następujące opcje:

  • Żądanie blokady
  • Dostęp do bazy danych
  • ObjectManager.getObject
  • ObjectManager.getObjectArray
  • ObjectManager.getResultSet
  • ObjectManager.getObjectIterator

Lista

Na liście w oknie dokowalnym można dodać w pełni kwalifikowane nazwy obiektów biznesowych, które mają być rejestrowane w sposób szczególny, gdy dana akcja jest zapisywana. Jeżeli w jednej z rejestrowanych akcji wystąpi wskazany ciąg znaków, np. jako nazwa używanego obiektu biznesowego albo jako używany ciąg OQL lub SQL, wówczas dodatkowo zapisywana jest informacja o ramce stosu (stack frame). Dzięki temu możliwe jest określenie miejsca w kodzie źródłowym, z którego nastąpiło wywołanie.

Dla listy dostępne są następujące przyciski na pasku narzędzi listy:

Nowy
Akcja Nowy umożliwia dodanie nowego obiektu biznesowego do listy. Po naciśnięciu przycisku dodawany jest nowy wiersz listy. W razie potrzeby można skorzystać z pomocy wartości, aby wyszukać obiekt biznesowy i dodać go do listy.

Usuń
Za pomocą przycisku Usuń zarejestrowane wpisy można usunąć z listy wcześniej zaznaczony wiersz, a tym samym wykluczyć dany obiekt biznesowy z rejestrowania.

Lista okna dokowalnego zawiera następującą kolumnę:

Kolumna Objaśnienie
Typ W tej kolumnie można dodać w pełni kwalifikowane nazwy obiektów biznesowych, które mają być rejestrowane w sposób szczególny. Jeżeli w jednej z rejestrowanych akcji wystąpi wskazany ciąg znaków, np. jako nazwa używanego obiektu biznesowego albo jako używany ciąg OQL lub SQL, wówczas dodatkowo zapisywana jest informacja o ramce stosu (stack frame).

Przyciski

Dostępne przyciski:

  • Rozpocznij rejestrowanie – za pomocą tego przycisku uruchamiane jest rejestrowanie. Odpowiada to wywołaniu narzędzia: wrkprf -start:<nazwa_pliku>.
  • Zakończ rejestrowanie – za pomocą tego przycisku zatrzymywane jest rejestrowanie. Odpowiada to wywołaniu narzędzia: wrkprf -stop.
  •  Otwórz aplikację do analizy – za pomocą tego przycisku następuje przejście do aplikacji Zapytanie o protokoły profilowania. Otwierany jest plik wskazany w polu Protokół profilowania. Jeżeli wskazany plik nie został utworzony za pomocą profilowania, aplikacja zostanie otwarta bez załadowania danego protokołu.

Opis aplikacji

Aplikacja Zapytanie o protokoły profilowania służy do analizy danych profilowania. Składa się z nagłówka i obszaru roboczego.

Nagłówek

Nagłówek obejmuje wskazanie pliku protokołu przeznaczonego do analizy oraz dodatkowe ustawienia dotyczące danych wyświetlanych w obszarze roboczym. Dostępne pola:

Protokół profilowania – należy wprowadzić nazwę pliku wraz ze ścieżką dostępu do pliku protokołu, który ma zostać poddany analizie. Alternatywnie można wybrać plik za pomocą pomocy wartości. Należy zwrócić uwagę, że plik jest zapisywany w Knowledge Store, a ścieżka pliku ma następujący wzorzec: kstore://{baza_danych}/{folder}/{nazwa_pliku}.

Uwaga
Analizować można wyłącznie pliki, które zostały zarejestrowane przy użyciu narzędzi udostępnionych przez Comarch ERP Enterprise.

Sesja – w polu Sesja wyświetlana jest sesja, do której odnosi się analiza. Podczas otwierania protokołu profilowania wyświetlana jest pierwsza sesja dostępna w pliku. Sesji nie można zmienić bezpośrednio w tym polu. Zmiana sesji odbywa się poprzez wybór innej sesji w oknie dokowanym Sesje.

Aplikacja – w polu Aplikacja można wprowadzić jedną lub więcej nazw aplikacji, aby ograniczyć analizę – a tym samym listę wyników – do tych aplikacji. Alternatywnie nazwę aplikacji można wybrać w oknie dokowanym Sesje, gdzie jest ona wyświetlana jako podfolder folderu sesji. Jeżeli pole pozostanie puste, wyświetlane dane dotyczą wszystkich aplikacji.

Funkcja – w polu Funkcja można wprowadzić jedną lub więcej nazw funkcji, aby ograniczyć analizę do tych funkcji. Alternatywnie funkcję można wybrać w oknie dokowalnym Sesje. W oknie dokowanym funkcja jest wyświetlana pod folderem Aplikacja. Jeżeli pole pozostanie puste, wyświetlane dane dotyczą wszystkich funkcji.

Dostępne pola w sekcji Filtry:

Akcje – w polu Akcje określa się, które akcje mają zostać poddane analizie i wyświetlone na liście wyników.
Należy wybrać spośród następujących pozycji:

  • getObject
  • getObjectIterator
  • getResultSet
  • getObjectArray
  • Dostęp do bazy danych
  • Rozpoczęcie transakcji
  • Żądanie blokady

Agregacje – w tym polu określa się sposób agregacji danych dla akcji w celu zoptymalizowania listy wyników danych analitycznych. Należy wybrać spośród następujących pozycji:

  • Baza danych

  • Klucz

  • Ustawienia

  • Operacja

  • Informacja o dostępie

Przykład

Podczas rejestrowania rozróżniane jest, który klucz został użyty do dostępu do obiektu (getObject). Jeżeli ta rozdzielona informacja ma zostać wyświetlona na liście wyników analizy, należy wybrać ten wpis.

Jeżeli natomiast ma zostać przeanalizowana suma dostępów na liście wyników, nie należy wybierać wpisu Klucz w tym polu. W takim przypadku na liście wyników nie będzie już rozróżnienia według użytego klucza.

Uwaga
Jeżeli dana akcja nie odnosi się do klucza, nie występuje żadna różnica. W przypadku dostępu przez ResultSet nie jest rejestrowana informacja o użytym kluczu. W związku z tym ustawienie agregacji Klucz nie powoduje w tym przypadku żadnej różnicy.

Filtruj do – w tym polu można określić agregację, według której lista wyników ma być filtrowana. Jeżeli dla danej akcji wybrane kryterium nie występuje (np. akcja nie odnosi się do klucza), wówczas kryterium to jest ignorowane dla tej akcji.

Należy wybrać jedną z następujących opcji:

  • Baza danych

  • Klucz

  • Ustawienia

  • Operacja

  • Informacja o dostępie

Wartość filtra – w tym polu należy wprowadzić wartość odnoszącą się do kolumny listy wyników wybranej w polu Filtruj do, aby dodatkowo zawęzić i zoptymalizować listę wyników. W odniesieniu do wartości należy uwzględnić objaśnienia dotyczące kolumn listy wyników.

Jeżeli protokół profilowania zawiera informacje o stackframes, w tym obszarze można skonfigurować odpowiednie ustawienia. Dostępne pola w sekcji

Filtry

Informacja o stackframe jest dostępna (pole wyboru) – za pomocą tej funkcji określa się, że na liście wyników dane mają być wyświetlane z uwzględnieniem różnych informacji o stackframe.

Filtr włączenia – w tym polu określa się, które obiekty biznesowe, dla których w protokole profilowania zarejestrowano stackframe, mają zostać uwzględnione w zapytaniu w celu optymalizacji listy wyników i zawężenia analizy. Można wprowadzić wiele obiektów biznesowych za pomocą przycisku z ikoną rombu znajdującego się przed tym polem. Alternatywnie możliwe jest przejęcie zaznaczonego wiersza z listy wyników do tego pola za pomocą przycisku Filtr włączenia stackframe na pasku narzędzi listy wyników.
Podczas analizy uwzględniane są wyłącznie te stackframe’y, dla których co najmniej jeden element śladu stosu (stacktrace) spełnia przynajmniej jeden z warunków włączenia.

Filtr wyłączenia – w tym polu określa się, które obiekty biznesowe, dla których w protokole profilowania zarejestrowano stackframe, mają zostać wykluczone z zapytania w celu optymalizacji listy wyników i zawężenia analizy. Można wprowadzić wiele obiektów biznesowych za pomocą przycisku z ikoną rombu znajdującego się przed tym polem. Alternatywnie możliwe jest przejęcie zaznaczonego wiersza z listy wyników do tego pola za pomocą przycisku Filtr wyłączenia stackframe na pasku narzędzi listy wyników.
Podczas analizy wykluczane są tylko te stackframe’y, dla których co najmniej jeden element stacktrace spełnia przynajmniej jeden z warunków wykluczenia.

Ustawienia agregacji

Zastosuj informację o stackframe (pole wyboru) – za pomocą tej funkcji określa się, że na liście wyników mają być wyświetlane wyłącznie dane, dla których zarejestrowano informacje o stackframe.

Ustawienia elementów stacktrace – element stacktrace odpowiada konkretnej lokalizacji w bazowym kodzie Java. W tym polu określa się poziom szczegółowości rozróżniania podczas analizy.
Należy wybrać jedną z następujących opcji:

  • Całkowicie – dane są wyświetlane osobno dla każdej różnej linii kodu.

  • Klasa Java i metoda

  • Klasa Java

Kod aplikacji – określa się stopień rozróżniania w obszarze kodu aplikacji w celu optymalizacji listy wyników. Dostępne opcje:

  • Brak – kod aplikacji jest ignorowany.

  • Przejścia – uwzględniane są wyłącznie miejsca przejść, np. z kodu aplikacji do kodu PGM.

  • Wszystkie – uwzględniany jest cały kod aplikacji, łącznie z wszystkimi przejściami.

Kod PGM – określa się stopień rozróżniania w obszarze kodu PGM w celu optymalizacji listy wyników.
Dostępne opcje:

  • Brak – kod PGM jest ignorowany.

  • Przejścia – uwzględniane są wyłącznie miejsca przejść, np. z kodu aplikacji do kodu PGM.

  • Wszystkie – uwzględniany jest cały kod PGM, łącznie ze wszystkimi przejściami.

Kod specyficzny dla projektu – określa się stopień rozróżniania w obszarze kodu specyficznego dla projektu w celu optymalizacji listy wyników. Dostępne opcje:

  • Brak – kod specyficzny dla projektu jest ignorowany.

  • Przejścia – uwzględniane są wyłącznie miejsca przejść, np. z kodu projektowego do kodu aplikacji.

  • Wszystkie – uwzględniany jest cały kod specyficzny dla projektu, łącznie ze wszystkimi przejściami.

Kod systemu – określa się stopień rozróżniania w obszarze kodu systemu w celu optymalizacji listy wyników. Dostępne opcje:

  • Brak – kod systemowy jest ignorowany.

  • Przejścia – uwzględniane są wyłącznie miejsca przejść, np. z kodu systemowego do kodu aplikacji.

  • Wszystkie – uwzględniany jest cały kod systemowy, łącznie ze wszystkimi przejściami.

Maksymalna głębokość – w tym polu określa się liczbę elementów stacktrace w ramach jednego stackframe, które mają być uwzględnione na liście wyników.

Obszar roboczy

Obszar roboczy składa się z listy wyników zawierającej dane z protokołu profilowania. Wyświetlane dane odnoszą się do kryteriów zapytania zdefiniowanych w obszarze zapytań.

Dane listy wyników są prezentowane na zakładkach opisanych w następujących rozdziałach:

Zakładka Rezultat

Po wybraniu zakładki Rezultat w dolnej części listy wyników wyświetlane są rezultaty zarejestrowanych akcji wraz z dodatkowymi informacjami analitycznymi.

1. Wiersz nagłówka
Kontekst – kontekst wykonania jest wyświetlany na końcu listy wyników w następującej postaci: Session-Start {użytkownik}.

 Dostępne kolumny:

Liczba – kolumna zawiera liczbę jednakowych zdarzeń o tych samych dodatkowych parametrach, które są wyświetlane w tym samym wierszu.

Nazwa akcji – kolumna zawiera nazwę zarejestrowanej akcji.

Obiekty Stack są dostępne – kolumna informuje o dostępności informacji o stackframe. Jeżeli pole wyboru w tej kolumnie jest zaznaczone, oznacza to, że dla danej akcji dostępna jest informacja o stackframe.

Baza danych – kolumna zawiera nazwę bazy danych, na której wykonano akcję.

Klucz – kolumna zawiera nazwę klucza obiektu biznesowego, jeżeli akcja się do niego odnosi.
Mogą być wyświetlane następujące klucze:

  • PK – klucz główny (Primary Key)

  • SK[n] – klucz wtórny (Secondary Key), n-ty klucz wtórny

  • TDK – klucz zależny od czasu (time-dependent key)

  • INV – użyty klucz jest nieprawidłowy (invalid)

  • DEP – obiekt biznesowy jest blokowany wyłącznie dlatego, że zablokowano powiązany obiekt zależny (Dependent).

Informacja o kluczu jest dostępna dla następujących akcji:

  • getObject

  • getObjectArray

  • żądanie blokady

W przypadku żądania blokady tylko wtedy, gdy blokada odnosi się do konkretnych instancji.

Ustawienia – kolumna zawiera skróty ustawień, które zostały zdefiniowane i zarejestrowane dla akcji. Dotyczy to akcji menedżera obiektów (Object Manager) oraz żądań blokady. Dla pozostałych akcji ustawienia nie są rejestrowane.
Dalsze informacje znajdują się w rozdziale: Objaśnienia dotyczące Ustawień.

Operacja – kolumna zawiera skróty wykonanych operacji jako rezultat danej zarejestrowanej akcji. Dotyczy to akcji menedżera obiektów oraz żądań blokady.
Dalsze informacje znajdują się w rozdziale: Objaśnienia dotyczące Operacja.

Dostęp – kolumna zawiera informacje o dostępie w zależności od zarejestrowanej akcji.
Jeżeli akcja odnosi się do obiektu biznesowego i dostęp do niego został zarejestrowany, kolumna zawiera w pełni kwalifikowaną nazwę danego obiektu biznesowego.

Jeżeli wykonano żądanie blokady, w większości przypadków odnosi się ono również do obiektu biznesowego, dlatego także w tym przypadku wyświetlana jest w pełni kwalifikowana nazwa danego obiektu biznesowego. Jeżeli natomiast zarejestrowano zaprogramowaną blokadę logiczną, wyświetlana jest odpowiednia informacja.

W przypadku ResultSet lub bezpośredniego dostępu do bazy danych kolumna zawiera odpowiedni ciąg OQL lub SQL.

2. Wiersz nagłówka
Pozycja
Jeżeli dostępna jest informacja o stackframe, kolumna ta zawiera pozycję elementu stacktrace w bazowym kodzie Java. Sposób wyświetlania zależy od wybranego ustawienia zapytania dla analizy stackframe.
Mogą być wyświetlane następujące informacje:

  • klasa Java, metoda i numer linii

  • klasa Java i metoda

  • klasa Java

Przyciski na pasku narzędzi na liście

Lista wyników posiada pasek narzędzi, który zawiera m.in. przyciski umożliwiające przejęcie wybranych danych do kryteriów zapytania lub kopiowanie danych.

[Aktualizuj] – dane z pliku protokołu profilowania są wyświetlane zgodnie z ustawionymi kryteriami zapytania.

[Włączenie filtra stackframe] – za pomocą tego przycisku można w uproszczony sposób dodać element stacktrace jako element stackframe uwzględniany w zapytaniu. W tym celu należy zaznaczyć element stacktrace na liście wyników, a następnie nacisnąć ten przycisk. Wybrany element zostanie dodany w obszarze rozwijanym Ustawienia stackframe do pola zapytania Filtr włączenia jako kryterium zapytania. Następnie, w razie potrzeby, należy nacisnąć przycisk [Aktualizuj] na pasku narzędzi listy, aby zaktualizować dane na liście wyników. Zgodnie ze zmianą zapytania uwzględniane są wyłącznie te stackframe’y, w których występuje dodany element stacktrace.

Wykluczenie filtr stackframe – za pomocą tego przycisku można w uproszczony sposób dodać element stacktrace jako element stackframe uwzględniany w zapytaniu. W tym celu należy zaznaczyć element stacktrace na liście wyników, a następnie nacisnąć ten przycisk. Wybrany element zostanie dodany w obszarze rozwijanym Ustawienia stackframe do pola zapytania Filtr wyłączenia jako kryterium zapytania. Następnie, w razie potrzeby, należy nacisnąć przycisk [Aktualizuj] na pasku narzędzi listy, aby zaktualizować dane na liście wyników. Zgodnie ze zmianą zapytania uwzględniane są wyłącznie te stackframe’y, w których dodany element stacktrace nie występuje.

Stackframe – jeżeli na liście wyników dostępne są stackframe’y, za pomocą tego przycisku można je włączać lub wyłączać (pokazywać lub ukrywać).

Kopiuj – jeżeli na liście wyników dostępne są stackframe’y, za pomocą tego przycisku można skopiować wcześniej zaznaczoną informację o stackframe do schowka.

Zakładka Częstotliwość

Po wybraniu zakładki Częstotliwość w dolnej części listy wyników wyświetlane są zapisy dotyczące stackframe’ów lub zawartych w nich elementów stacktrace. Jest to szczególnie przydatne, gdy zachodzi potrzeba zidentyfikowania np. fragmentów kodu, które są wykorzystywane wyjątkowo często. Dostępne kolumny:

Częstotliwość – kolumna zawiera liczbę miejsc w kodzie, w których dany element stacktrace występuje w poszczególnych stackframe’ach.

Ścieżki wejściowe – kolumna zawiera liczbę ścieżek wejściowych elementu stacktrace.

Ścieżki wyjściowe – kolumna zawiera liczbę ścieżek wyjściowych elementu stacktrace.

Pozycja – jeżeli dostępna jest informacja o stackframe, kolumna ta zawiera pozycję elementu stacktrace w bazowym kodzie Java. Sposób wyświetlania zależy od wybranego ustawienia zapytania dla analizy stackframe.
Mogą być wyświetlane następujące informacje:

  • klasa Java, metoda i numer linii

  • klasa Java i metoda

  • klasa Java

Przyciski na pasku narzędzi na liście

Lista wyników posiada pasek narzędzi, który zawiera m.in. przyciski umożliwiające przejęcie wybranych danych do kryteriów zapytania lub kopiowanie danych.

[Aktualizuj] – dane z pliku protokołu profilowania są wyświetlane zgodnie z ustawionymi kryteriami zapytania.

[Włączenie filtra stackframe] – za pomocą tego przycisku można w uproszczony sposób dodać element stacktrace jako element stackframe uwzględniany w zapytaniu. W tym celu należy zaznaczyć element stacktrace na liście wyników, a następnie nacisnąć ten przycisk. Wybrany element zostanie dodany w obszarze rozwijanym Ustawienia stackframe do pola zapytania Filtr włączenia jako kryterium zapytania. Następnie, w razie potrzeby, należy nacisnąć przycisk [Aktualizuj] na pasku narzędzi listy, aby zaktualizować dane na liście wyników. Zgodnie ze zmianą zapytania uwzględniane są wyłącznie te stackframe’y, w których występuje dodany element stacktrace.

Wykluczenie filtr stackframe – za pomocą tego przycisku można w uproszczony sposób dodać element stacktrace jako element stackframe uwzględniany w zapytaniu. W tym celu należy zaznaczyć element stacktrace na liście wyników, a następnie nacisnąć ten przycisk. Wybrany element zostanie dodany w obszarze rozwijanym Ustawienia stackframe do pola zapytania Filtr wyłączenia jako kryterium zapytania. Następnie, w razie potrzeby, należy nacisnąć przycisk [Aktualizuj] na pasku narzędzi listy, aby zaktualizować dane na liście wyników. Zgodnie ze zmianą zapytania uwzględniane są wyłącznie te stackframe’y, w których dodany element stacktrace nie występuje.

Objaśnienia dotyczące Ustawień

Niniejszy rozdział zawiera objaśnienia wpisów w kolumnie Ustawienia, które zależą od danej akcji. Należy zapoznać się z następującymi rozdziałami:

ObjectManager

Ustawienia dla dostępów realizowanych za pośrednictwem ObjectManagera odnoszą się do trybów dostępu (flags) ustawionych przy danym wywołaniu. Dalsze informacje na temat trybów dostępu znajdują się w dokumentacji: Usługa persystencji, rozdział Tryby dostępu.

Dostępne są następujące skróty flag:

  • R – akcja została wywołana z flagą READ.

  • RU – akcja została wywołana z flagą READ_UPDATE.

  • RW – akcja została wywołana z flagą READ_WRITE.

  • INS – akcja została wywołana z flagą INSERT.

  • RP – akcja została wywołana z flagą READ_PARALLEL.

  • RR- akcja została wywołana z flagą READ_REPEATABLE.

  • BC – akcja została wywołana z flagą BYPASS_CACHE.

  • CO – akcja została wywołana z flagą CACHE_ONLY.

  • DL – akcja została wywołana z flagą DISABLE_LOCKING.

Żądanie blokady

Ustawienia dla żądań blokady odnoszą się do różnych typów blokad. Więcej informacji na temat typów blokad można znaleźć w następującej artykule: Zarządzanie blokadami

Dla żądań blokady istnieją następujące skróty:

  • I – żądanie blokady odnosi się do konkretnej instancji.

  • T – żądanie blokady odnosi się do całej tabeli.

  • S – żądanie blokady odnosi się do systemu, tj. do wszystkich baz danych systemu, w których dana tabela występuje.

  • L – żądanie blokady jest tzw. blokadą logiczną. Została utworzona programowo.

  • R – zażądano blokady odczytu.

  • W – zażądano blokady zapisu.

  • U – zażądano blokady użycia (use).

  • E – zażądano blokady wyłącznej.

Objaśnienia dotyczące Operacja

Niniejszy rozdział zawiera objaśnienia wpisów w kolumnie Operacja, które zależą od danej akcji. Należy zapoznać się z następującymi rozdziałami:

ObjectManager

Operacje przy dostępach realizowanych za pośrednictwem ObjectManagera odnoszą się do trybów dostępu (flags) ustawionych przy danym wywołaniu. Dalsze informacje na temat trybów dostępu znajdują się w dokumentacji: Usługa persystencji, rozdział Tryby dostępu.

Mogą być wyświetlane następujące tryby dostępu:

  • LA (lock acquired) – podczas dostępu zażądano również blokady.

  • TC (transaction cache hit) – obiekt został odczytany z pamięci podręcznej transakcji.

  • SC (shared cache hit) – obiekt został odczytany z pamięci podręcznej współdzielonej.

  • DB (database access) – obiekt został odczytany z bazy danych.

  • MS (miss, object not found) – obiekt nie został znaleziony.

  • DB[n,m] – występuje wyłącznie przy zapytaniach ObjectArray. Łącznie zażądano m obiektów, z czego n obiektów zostało odczytanych z bazy danych.

TransactionManager

  • DMJ – Disable Modification Journal – do dziennika modyfikacji nie zapisano żadnych wpisów.

  • DTL – Disable Transfer List – do list transferowych nie zapisano żadnych wpisów.

  • DUI – Disable Update Info – informacja o aktualizacji nie jest aktualizowana podczas zapisu obiektu.

  • OC – Ordered Commit – obiekty zostały zapisane dokładnie w takiej kolejności, w jakiej zostały zarejestrowane do modyfikacji za pomocą putObject.

Objaśnienia dotyczące Żadania blokady

Niniejszy rozdział zawiera objaśnienia wpisów w kolumnie Żądanie blokady, które zależą od danej akcji.

  • G – zażądana blokada została przyznana.

  • N – zażądana blokada już istniała.

  • T – żądanie blokady spowodowało przekroczenie czasu oczekiwania (timeout).

  • EX – żądanie blokady spowodowało wystąpienie wyjątku (exception). Wystąpienie wyjątku wskazuje na błąd programistyczny.

Widoki na standardowym pasku narzędzi: Poziomy agregacji

Na standardowym pasku narzędzi aplikacji dostępne są następujące widoki:

  • Sesja – akcje są agregowane dla wybranej sesji, tzn. są zliczane ponad kontekstami, a więc łącznie dla aplikacji, transakcji oraz funkcji aplikacji. Jeżeli w obszarze zapytań w polu Aplikacja podano nazwę aplikacji, uwzględniane są wyłącznie akcje z aplikacji, których nazwy pasują do podanej nazwy. To samo dotyczy funkcji aplikacji – jeżeli aplikacja nie jest uwzględniana, wówczas jej funkcje podrzędne również są ignorowane. Ten poziom agregacji umożliwia zliczanie akcji wykonywanych w ramach danej funkcji aplikacji w wielu wywołaniach tej funkcji. Pozwala to w prosty sposób określić całkowity koszt funkcji w aplikacji.

  • Aplikacja – akcje są agregowane dla każdej aplikacji w wybranej sesji, tzn. są zliczane kontekstowo wyłącznie w obrębie podrzędnych funkcji aplikacji, ale nie ponad aplikacjami. Po wynikach agregacji dla całej aplikacji wyświetlane są odpowiednie wyniki agregacji dla podrzędnych funkcji.

    Ten poziom agregacji umożliwia szybkie uzyskanie przeglądu całkowitej liczby wywołań akcji w aplikacji. Wywołania akcji są dodatkowo rozdzielone według ich wystąpień w poszczególnych funkcjach aplikacji.

  • Transakcja – akcje są agregowane dla każdej transakcji w wybranej sesji, tzn. są zliczane oddzielnie dla każdej transakcji; inne konteksty nie są brane pod uwagę.

Okno dokowane Sesje

Okno dokowalne Sesja służy do uzyskania przeglądu danych zawartych w protokole profilowania. Przedstawia ono sesje, aplikacje oraz funkcje w postaci hierarchicznej struktury drzewa. Jedna sesja może zawierać jedną lub więcej aplikacji, którym mogą być przypisane funkcje aplikacji.

Jeżeli protokół profilowania zawiera więcej niż jedną sesję, za pomocą tego okna można wybrać sesję przeznaczoną do analizy; jej nazwa zostanie wówczas przeniesiona do pola Sesja w obszarze zapytań. Analogicznie można postępować z aplikacjami oraz funkcjami aplikacji.

Instrukcja: Protokoły profilowania dla akcji zależnych od aplikacji

Jak opisano w artykule Optymalizacja wydajności, pojedyncza akcja, tzn. jeden roundtrip, w aplikacji interaktywnej powinna w normalnym przypadku trwać maksymalnie 0,5 sekundy. Jeżeli akcja trwa dłużej, czas oczekiwania jest przez użytkownika odbierany negatywnie. W przypadku akcji, które użytkownik wykonuje szczególnie często, takich jak np. wprowadzanie nowej pozycji zlecenia sprzedaży, szczególnie istotne jest, aby były one realizowane możliwie jak najszybciej. Rejestrowanie pozycji zamówień sprzedaży ma kluczowe znaczenie dla niemal wszystkich klientów.

Za pomocą protokołów profilowania można zidentyfikować przyczyny, dla których niektóre akcje trwają długo lub zbyt długo.

Nie należy w żadnym wypadku aktywować profilowania na serwerze aplikacji, na którym użytkownicy pracują produkcyjnie. W systemach produkcyjnych należy zawsze korzystać z dedykowanego serwera aplikacyjnego, na którym aktywne jest wyłącznie profilowanie. Poza systemami deweloperskimi wymagana jest do tego specjalna zdolność administracyjna. Szczegóły w rozdziale Możliwości specjalne.

Instrukcja

Procedura rejestrowania na przykład operacji przejęcia pozycji zamówienia sprzedaży wygląda następująco:

  1. Aktywować profilowanie i natychmiast wstrzymać rejestrowanie akcji:
    wrkprf -start:C:\orderdetail.dat -pause
  2. Zalogować się do odpowiedniego serwera aplikacji systemu ERP.
  3. Otworzyć aplikację Zamówienia sprzedaży.
  4. Utworzyć nowe zamówienie sprzedaży.
  5. Wprowadzić nową pozycję.
  6. Aktywować rejestrowanie akcji w protokole profilowania: wrkprf -resume
  7. Przejąć pozycję.
  8. Zakończyć rejestrowanie protokołu profilowania: wrkprf -stop
  9. Przeanalizować protokół profilowania za pomocą aplikacji Zapytanie o protokoły profilowania.

Przyczyny

Dostępy do bazy danych są z doświadczenia operacjami czasochłonnymi. O liczbie oraz czasie trwania roundtripu decydują liczba i złożoność zapytań do bazy danych.

Przyczynami zapytań do bazy danych, których należy unikać, mogą być m.in. następujące akcje:

getObject –  jeżeli dla akcji getObject zarejestrowano operację DB, oznacza to, że nastąpił dostęp do bazy danych. Jeżeli dla operacji nie jest wyświetlane DB, wówczas dostęp do bazy danych nie był konieczny i czas tego dostępu można pominąć. Jeżeli jednak zapytanie do bazy danych nie znalazło obiektu, wyświetlana jest operacja MS. Jeżeli przy wielu dostępach rejestrowana jest operacja MS, jest to wskazówka na niekorzystną implementację programistyczną.
Duża liczba pojedynczych dostępów do tego samego obiektu biznesowego za pomocą getObject świadczy o braku przetwarzania blokowego w wykorzystywanej operacji.
Przy dostępach odczytu do danych podstawowych należy pamiętać, że przy wypełnionym cache’u z reguły nie jest wymagany dostęp do bazy danych.

getObjectArray – jeżeli dla akcji getObjectArray zarejestrowano operację DB[n], zapisywana jest liczba obiektów n, które zostały odczytane z bazy danych. Jeżeli n = 0, dostęp do bazy danych nie nastąpił.

getObjectIterator – każde użycie iteratora obiektów powoduje jeden lub więcej dostępów do bazy danych. Jeżeli obiekt biznesowy odczytywany przez iterator jest zarządzany strategią cache least recently used (LRU), w jednym zapytaniu do bazy danych odczytywane są klucze główne obiektów. Instancje obiektów biznesowych są następnie odczytywane blokami po 16 obiektów za pomocą getObjectArray.

getResultSet – każde użycie ResultSet powoduje dokładnie jeden dostęp do bazy danych.

W przypadku problemów z wydajnością zaleca się, aby w pierwszym zapisie profilowania najpierw zidentyfikować szczególnie często wykonywane akcje. Pozwala to w drugim zapisie określić informacje o stackframe. Przykładowo, podczas analizy pierwszego zapisu można stwierdzić, że dany obiekt biznesowy jest otwierany częściej, niż zakładano. Następnie można wskazać ten obiekt biznesowy jako warunek stackframe dla drugiego zapisu. W rezultacie przy każdym otwarciu tego obiektu rejestrowana będzie odpowiednia informacja o stackframe. Umożliwia to identyfikację problematycznych fragmentów kodu i ich ewentualną optymalizację. Czasy wykonania zapytań do bazy danych można określić za pomocą monitorów wydajności.

Dalsze informacje znajdują się w dokumencie Monitory wydajności.

W dokumencie Optymalizacja wydajności, w rozdziale Aplikacje interaktywne, opisano, ile dostępów do bazy danych jest dopuszczalnych w ramach jednego roundtripu.

Uprawnienia

Uprawnienia mogą zostać przypisane za pomocą ról uprawnień jak również poprzez przyporządkowanie organizacji. Szczegółowe informacje można znaleźć w artykule Uprawnienia.

Możliwości specjalne

Dla aplikacji Zapytanie o protokoły profilowania dostępna jest następujące uprawnienie:

com.cisag.sys.kernel.profiling

Ta właściwość administracyjna jest potrzebna tylko w systemach deweloperskich, aby móc przeprowadzać profilowanie.

Przyporządkowania organizacji

Przyporządkowanie organizacji nie jest wymagane.

Funkcje specjalne

Dla aplikacji Zapytanie o protokoły profilowania nie ma istnieją dodatkowe funkcje.

Uprawnienia dla partnerów biznesowych

Aplikacja Zapytanie o protokoły profilowania nie jest autoryzowana dla partnerów biznesowych.

Czy ten artykuł był pomocny?