Wprowadzenie
W artykule przedstawione zostanie działanie współdzielonej pamięci podręcznej w systemie ERP. Konfiguracja współdzielonej pamięci podręcznej wpływa na wydajność całego systemu.
Grupa docelowa
- Administratorzy systemu
- Programiści
Wymagania wstępne
Wymagana jest znajomość programowania i architektury systemu ERP. Dodatkowo pomocna jest wiedza z zakresu jego administracji.
Opis
Poniższy schemat przedstawia interakcję między pamięcią podręczną transakcji (transaction cache), współdzieloną pamięcią podręczną (shared cache) i bazą danych.

Współdzielona pamięć podręczna służy do tymczasowego przechowywania już załadowanych instancji obiektów biznesowych w pamięci operacyjnej. Dostęp do obiektu biznesowego w bazie danych wymaga znacznie więcej czasu niż dostęp do obiektu biznesowego w współdzielonej pamięci podręcznej (shared cache). Dlatego raz odczytane z bazy danych obiekty biznesowe są przez pewien czas w niej przechowywane. Odczyty danych w celu załadowania obiektów biznesowych przebiegają przez współdzieloną pamięć podręczną.
Współdzielona pamięć podręczna przechowuje jedynie proste odczyty służące do załadowania obiektów biznesowych, ale nie wyniki złożonych zapytań. Czas potrzebny na wykonanie złożonych zapytań, takich jak wyszukiwanie, jest niezależny od współdzielonej pamięci podręcznej.
Każdy serwer aplikacyjny systemu ERP posiada własną współdzieloną pamięć podręczną, do której mają wspólny dostęp wszystkie sesje. Gdy program aplikacyjny dokonuje zmiany w bazie danych, wszystkie zmiany są najpierw zbierane w pamięci podręcznej transakcji (transaction cache), a następnie zapisywane wspólnie do bazy danych i ewentualnie również do współdzielonej pamięci podręcznej.
Dla nowych serwerów aplikacyjnych system automatycznie ustala rozmiar współdzielonej pamięci podręcznej, jeśli nie zostało to skonfigurowane ręcznie. Do ręcznej konfiguracji służy aplikacja Ustawienia serwera aplikacji.
Im większa jest współdzielona pamięć podręczna, tym:
- większe jest prawdopodobieństwo, że żądania odczytu będą mogły być nie obsłużone.
- mniej pamięci operacyjnej pozostaje dla sesji, tzn. tym mniejsza liczba użytkowników może pracować na serwerze aplikacyjnym.
Współdzielona pamięć podręczna jest podzielona na kilka partycji pamięci podręcznej (Cache-Partitionen). Każda z partycji pamięci podręcznej ma ograniczony rozmiar, a ich liczbę i rozmiar można dowolnie konfigurować. Każdy obiekt biznesowy jest, w zależności od rodzaju danych i bazy danych, przydzielany do jednej z partycji pamięci podręcznej.

Podział współdzielonej pamięci podręcznej na kilka partycji pamięci podręcznej odzwierciedla różne zastosowania obiektów biznesowych. Dane podstawowe są bardzo często odczytywane wielokrotnie, podczas gdy zmieniają się w bardzo niewielkim stopniu. Dane transakcyjne są rzadko odczytywane wielokrotnie, ale zmieniają się bardzo często. Jeśli dane podstawowe i transakcyjne są przechowywane w pamięci podręcznej, dane podstawowe są wypierane przez dane transakcyjne i dlatego muszą być ponownie odczytywane niepotrzebnie często. Jednak dane transakcyjne nie korzystają zbytnio z dużej pamięci podręcznej, ponieważ rzadko są ponownie wykorzystywane. Obsługując je oddzielnie, można zwiększyć współczynnik trafień współdzielonej pamięci podręcznej, a tym samym poprawić wydajność całego systemu.
Ustawienia obiektu biznesowego
Programista definiuje, jakie dane zawiera obiekt biznesowy i jak ten obiekt biznesowy ma być obsługiwany we współdzielonej pamięci podręcznej. Ustawienia te są bezpośrednio związane z wykorzystaniem obiektu biznesowego w aplikacjach.
Strategia pamięci podręcznej
Każdy obiekt biznesowy jest obsługiwany zgodnie z określoną strategią we współdzielonej pamięci podręcznej. Dla każdego obiektu biznesowego i bazy danych można wprowadzić następujące ustawienia „buforowania” (tymczasowego przechowywania):
| Strategia | Opis | 
|---|---|
| Brak cache’owania | Współdzielona pamięć (Shared Cache) nie jest używana podczas odczytu. Jeżeli obiekt nie znajduje się w pamięci transakcyjnej (Transaction Cache), dane są zawsze pobierane bezpośrednio z bazy danych. | 
| LRU (Least Recently Used) | Obiekty ww współdzielonej pamięci podręcznej są zarządzane zgodnie z polityką LRU (Least Recently Used). Strategia ta powoduje, że obiekt, który był najdłużej nieużywany, zostaje zastąpiony nowym. W zależności od rodzaju danych i bazy danych, listy LRU są przechowywane w różnych partycjach cache’a, które mają ograniczoną pojemność. | 
| Wszystkie instancje | Przy pierwszym dostępie do obiektu danego typu, wszystkie obiekty tego typu są ładowane z bazy danych do współdzielonej pamięci podręcznej. Dzięki temu wiadomo, które obiekty nie istnieją – co pozwala na pomijanie zapytań do bazy danych dla nieistniejących rekordów. | 
Buforowanie należy wyłączać tylko w szczególnych przypadkach m.in.:
- obiekty są tylko zapisywane i rzadko odczytywane
- istnieje duża liczba obiektów i są one rzadko odczytywane wielokrotnie
Wszystkie instancje powinny być przechowywane w pamięci współdzielonej (Shared Cache) tylko wtedy, gdy system często próbuje odczytywać obiekty z nieprawidłowym kluczem, a liczba obiektów jest niewielka. Obiekty, których wszystkie instancje są przechowywane, nie są umieszczane w partycjach pamięci podręcznej (Cache-Partitionen).
Strategia LRU (Least Recently Used) stanowi przypadek domyślny. Każdy obiekt oznaczony strategią LRU jest zapisywany w partycji pamięci współdzielonej (Shared Cache). Partycje pamięci podręcznej to obszary pamięci o ograniczonym rozmiarze. Przypisanie obiektów do partycji pamięci podręcznej zależy od bazy danych i rodzaju danych.
Typ danych
Rodzaj danych obiektu biznesowego zasadniczo rozróżnia częstotliwość zmian. Różne częstotliwości zmian obiektu biznesowego są najważniejszym powodem partycjonowania pamięci podręcznej.
Rodzaj danych jest istotnym kryterium decydującym o tym, do której partycji pamięci podręcznej w pamięci współdzielonej (Shared Cache) zostanie przypisany obiekt biznesowy.
| Rodzaj danych | Opis | 
| Dane podstawowe | Dane prawie się nie zmieniają. Ich rozmiar różni się w zależności od systemu. Przykłady: 
 | 
| Podstawowe dane konfiguracyjne | Dane prawie się nie zmieniają. Ich rozmiar jest ograniczony i podobny na różnych systemach. Przykłady: 
 | 
| Dane operacyjne | Dane często się zmieniają. Ilość danych rośnie bardzo szybko. Przykłady: 
 | 
| Dane tymczasowe | Dane często się zmieniają. Ilość danych jest zmienna. Dane istnieją tylko przez krótki czas. Przykład: 
 | 
| Indywidualne teksty interfejsu użytkownika (język wyświetlania) | Dane prawie się nie zmieniają i dotyczą tekstów interfejsu użytkownika oraz ich wersji językowych. Tłumaczone teksty mogą być dostępne we wszystkich językach interfejsu systemu. Są to np. typy relacji partnerów, dla których standardowo dostarczane są treści OLTP i do których wymagane jest NLS. Przykłady: 
 | 
Partycje pamięci podręcznej
Z jednej strony, podział pamięci współdzielonej na kilka oddzielnych partycji zapobiega sytuacji, w której masowe przetwarzanie danych operacyjnych wypiera wszystkie inne zawartości cache’a. Jednak nadmierna użycie partycji powoduje, że dostępna pamięć operacyjna nie jest wykorzystywana optymalnie.
Odpowiedni podział pamięci operacyjnej na różne partycje cache zależy od konkretnego przypadku użycia.
Ponieważ mogą występować dodatkowe złożone zależności między konkretnym przypadkiem użycia a wielkością lub podziałem pamięci współdzielonej, zaleca się, aby przy uruchamianiu nowego systemu początkowo korzystać z ustawień domyślnych.
W przypadku większych systemów zaleca się optymalizację tych ustawień za pomocą testów obciążeniowych. Dla mniejszych systemów lub systemów już działających, optymalizacja ustawień może się również odbywać w trakcie działania systemu.
Wielkości partycji cache można zmieniać za pomocą aplikacji Ustawienia serwera aplikacji.
Standardowy podział partycji pamięci podręcznej
W przypadku nowego serwera aplikacji systemu ERP system automatycznie tworzy partycje i przypisuje odpowiednie rozmiary, jeśli użytkownik nie określi inaczej w aplikacji Ustawienia serwera aplikacji. Rozmiary można zmienić w celu zwiększenia wydajności serwera aplikacji.
Poniżej znajdują się przykłady automatycznie określonych rozmiarów partycji w zależności od pamięci głównej serwera aplikacji (sterty)
| Pamięć operacyjna | Partycja danych podstawowych | Partycja danych operacyjnych | 
|---|---|---|
| 0,5 GB | 32 MB | 32 MB | 
| 1 GB | 64 MB | 64 MB | 
| 1,5 GB | 96 MB | 96 MB | 
| 2 GB | 128 MB | 128 MB | 
| 4 GB | 128 MB | 196 MB | 
| 8 GB | 128 MB | 256 MB | 
| 16 GB | 196 MB | 384 MB | 
| 24 GB | 196 MB | 512 MB | 
| 32 GB | 256 MB | 768 MB | 
Przypisanie obiektu biznesowego do partycji pamięci podręcznej zależy od typu danych i bazy danych. Poniższa tabela zawiera odniesienia do partycji pamięci podręcznej w ustawieniach domyślnych:
| Typ bazy danych | |||||
| Typ danych | Konfiguracyjna | Repozytorium | OLTP | OLAP | |
| Dane podstawowe | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | |
| Dane konfiguracyjne | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | |
| Dane operacyjne | Partycja danych operacyjnych | Partycja danych operacyjnych | Partycja danych operacyjnych | Partycja danych operacyjnych | |
| Dane tymczasowe | Partycja danych operacyjnych | Partycja danych operacyjnych | Partycja danych operacyjnych | Partycja danych operacyjnych | |
| Indywidualne teksty interfejsu (język wyświetlania) | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | Partycja danych podstawowych | |
Instrukcja: Definiowanie partycji pamięci podręcznej
Za pomocą aplikacji Ustawienia serwera aplikacji można zdefiniować partycje pamięci podręcznej i ich rozmiary dla serwera aplikacji.
Instrukcja:
- Otworzyć aplikację Ustawienia serwera aplikacji
- Przejść do widoku Serwer aplikacji
- Wprowadzić nazwę serwera aplikacji w polu Serwer aplikacji, dla którego mają zostać wprowadzone ustawienia
- Wybrać przycisk [Dodaj] na standardowym pasku narzędzi.
- Naciśnij przycisk [Nowy] na zakładce Partycje.
- W nowym wierszu w tabeli należy wprowadź identyfikator partycji danych podstawowych w kolumnie Partycja
- W tym samym wierszu należy wprowadzić rozmiar partycji danych podstawowych w megabajtach (MB) w kolumnie Rozmiar.
- Powtórzyć proces dla partycji danych operacyjnych
- Przejść na zakładkę Przyporządkowania, na której są dostępne wszystkie przypisane bazy danych
- Dla wszystkich baz danych w kolumnach dla typów danych Podstawowe dane konfiguracyjne i Dane konfiguracyjne wybrać partycję pamięci podręcznej wprowadzoną wcześniej na zakładce Partycje dla danych podstawowych.
- dla wszystkich baz danych w kolumnach dla typów danych Dane transakcyjne i Tymczasowe należy wybrać partycję cache wprowadzoną wcześniej na zakładce Partycje dla danych transakcyjnych.
- Wybrać przycisk [Zapisz] na standardowym pasku narzędzi.
Optymalizacja partycji pamięci podręcznej
Optymalne rozmieszczenie partycji pamięci podręcznej zależy w dużej mierze od profilu obciążenia systemu. Jeśli baza danych OLTP zawiera dużą liczbę artykułów lub partnerów lub skonfigurowana jest duża liczba języków dodatkowych, wówczas taki system wymaga dużej partycji danych podstawowych. Z drugiej strony, jeśli baza danych OLTP zawiera zamówienia z dużą liczbą pozycji, wówczas duża partycja danych transakcyjnych może poprawić czasy odpowiedzi na wprowadzanie zamówień.
Przeznaczenie serwera aplikacji również wpływa na rozmiar partycji pamięci podręcznej. W przypadku serwera aplikacji z nieograniczonym dostępem ODBC partycja danych głównych nie powinna być mniejsza niż 64 MB. Nieograniczony dostęp ODBC oznacza, że łącza do danych podstawowych są w niektórych przypadkach rozwiązywane za pośrednictwem Persistence service, tj. za pośrednictwem współdzielonej pamięci podręcznej. Jeśli współużytkowana pamięć podręczna jest tak duża, że zawiera wszystkie dane podstawowe istotne dla dostępu ODBC, czas wyprowadzania dokumentów i raportów ulega skróceniu.
Zalecanym jest sprawdzanie współczynnika trafień pamięci podręcznej i alokacji partycji (poziomu zapełnienia) partycji pamięci podręcznej w regularnych odstępach czasu lub po teście obciążenia. Jeśli współczynnik trafień pamięci podręcznej w partycji jest zbyt niski, to współdzielona pamięć podręczna nie może odpowiedzieć na wystarczającą liczbę dostępów do obiektów. W takim przypadku należy uzyskać dostęp do znacznie wolniejszej bazy danych. Może to mieć negatywny wpływ na wydajność całego systemu. Następujące przyczyny mogą prowadzić do niskiego wskaźnika trafień pamięci podręcznej:
- Aplikacja uzyskuje dostęp do dużej ilości danych (np. zlecenie przetwarzania).
- Aplikacja jest źle zaprogramowana i próbuje załadować obiekty, dla których nie istnieją.
- Partycja pamięci podręcznej jest zbyt mała.
Alokacja partycji mniejsza niż 99% oznacza, że serwer aplikacji nie wykorzystał maksymalnego rozmiaru partycji pamięci podręcznej. Może to mieć następujące przyczyny:
- Serwer aplikacji nie działał wystarczająco długo.
- Serwer aplikacji nie był jeszcze używany.
- Partycja pamięci podręcznej jest zbyt duża.
Współczynnik trafień pamięci podręcznej i alokacja partycji są wyświetlane w aplikacji Panel System dla uruchomionego serwera aplikacji.
Instrukcja: Sprawdzanie współczynnika trafień pamięci podręcznej i zajętości partycji
- Otworzyć aplikację Panel System.
- W polu Typ wybierz typ Serwer aplikacji.
- W polu Nazwa wprowadź identyfikator serwera aplikacji, a następnie kliknij przycisk [Aktualizuj] na standardowym pasku narzędzi.
- Dane serwera aplikacji zostaną otwarte.
- Przejść na zakładkę Partycje.
- Na liście na zakładce Partycje wyświetlane są między innymi współczynnik trafień i alokacja partycji w procentach.
Współczynnik trafień pamięci podręcznej partycji głównej powinien wynosić ponad 95%. Jeśli współczynnik trafień pamięci podręcznej jest niższy niż 95%, jest to znak ostrzegawczy. Jeśli współczynnik trafień pamięci podręcznej jest niższy niż 95% przez dłuższy czas lub występuje poważny problem z wydajnością, w takim przypadku należy zwiększyć rozmiar partycji danych podstawowych.
W przypadku partycji danych transakcji współczynnik trafień pamięci podręcznej zależy od używanej funkcjonalności. W związku z tym nie jest możliwe ogólne określenie konkretnych wartości granicznych. Znakiem ostrzegawczym, że partycja transakcji jest zbyt mała, jest długi czas oczekiwania aplikacji przetwarzających zamówienia podczas przetwarzania.
W zależności od używanych aplikacji, niski współczynnik trafień pamięci podręcznej w partycji danych transakcji może być nawet normalnym przypadkiem. Na przykład, jeśli każdy rekord danych jest otwierany tylko raz, współczynnik trafień pamięci podręcznej wynosi 0%. Jednak ten niski wskaźnik trafień pamięci podręcznej nie jest oznaką słabej wydajności serwera aplikacji, ale oznaką dobrego programowania aplikacji. To stwierdzenie nie może być uogólnione, ale powinno wyjaśnić, że wskaźnik trafień pamięci podręcznej dla danych transakcji niekoniecznie jest związany z wydajnością serwera aplikacji.
Jeśli po 15 minutach na serwerze aplikacji z obciążeniem wykorzystanie partycji pamięci podręcznej nie wynosi 99%, to prawdopodobnie ta partycja jest zbyt duża. Jeśli po 2 godzinach wskaźnik zajętości partycji nadal wynosi mniej niż 99%, oznacza to, że partycja pamięci podręcznej jest zbyt duża. Po zmniejszeniu rozmiaru partycji pamięci podręcznej należy sprawdzić współczynnik trafień pamięci podręcznej. Jeśli współczynnik trafień pamięci podręcznej znacznie spadnie, należy ponownie powiększyć partycję pamięci podręcznej.
Po zmianie partycji pamięci podręcznej należy sprawdzić, czy zmiana przyniosła pożądany efekt. Jeśli na przykład powiększenie współdzielonej pamięci podręcznej nie przyniosło pozytywnego efektu, należy ponownie zmniejszyć rozmiar współdzielonej pamięci podręcznej, aby pozostało więcej pamięci dla aplikacji.
 
                        


