Strojenie kolejki wyrażeń

Mechanizm wyrażeń może wymagać strojenia na podstawie zasobów serwera, licznika wyrażeń i złożoności każdej instalacji. Zwykle proces ten obejmuje wielokrotne strojenie jednego parametru i mierzenie dla niego wydajności, aż do osiągnięcia stanu, w którym nie jest możliwa dalsza poprawa wydajności. Konieczna jest obsługa śledzenia rekordów. Nowe strojenie jest wymagane w przypadku zmiany sprzętu, zastosowania lub konfiguracji.
Administrator musi sprawdzić dla każdej instalacji następujące ustawienia aplikacji:
Tabela 1. Ustawienia aplikacji do strojenia kolejki wyrażeń
Ustawienie Jednostka Domyślny Środowisko wykonawcze* Opis Wskazówka dotycząca strojenia
formula.queue.maxage h 24 Tak Maksymalna (niegwarantowana) liczba godzin przechowywania historii kolejki wyrażeń. Czyszczone są tylko wyrażenia, które zostały już uruchomione. Jest to przeprowadzane przy użyciu zadania czyszczenia formuły. Wykonane pozycje kolejki, które znajdują się w tabeli kolejki formuł, są przechowywane jako historia wykonywania. Ta historia jest używana na potrzeby sprawdzania pętli wykonywania i generowania statystyki. Jeśli dane statystyczne nie są potrzebne, tę liczbę można zmniejszyć podczas konfigurowania wysokiej przepustowości, co zredukuje wielkość tabeli. Nigdy nie należy ustawiać tej wartości na zero, ponieważ funkcja sprawdzania pętli wymaga do poprawnego działania historii obejmującej co najmniej jedną godzinę.
formula.queue.maxsize pozycje 500 000 Tak Pożądana maksymalna liczba pozycji w kolejce wyrażeń. Zadanie czyszczenia próbuje utrzymywać liczbę pozycji niższą od podanej, przeprowadzając czyszczenie historii. Czyszczone są tylko wyrażenia, które zostały już uruchomione. Ta reguła zastępuje ustawienie formula.queue.maxage. Tę liczbę można zmniejszyć, aby ograniczyć wielkość kolejki formuł w okresach wysokich obciążeń i zachować historię w pozostałych okresach. Dobrym przybliżeniem tej liczby jest wartość nieco poniżej średniej przepustowości w okresie zdefiniowanym w ustawieniu formula.queue.maxage.
formula.execution.batch.size pozycje 30 Tak Liczba pozycji kolejki wyrażeń przydzielonych do jednego wątku w każdym uruchomieniu przydziału. Pozycje zostają oznaczone jako rozpoczęte. Wątek zostaje uruchomiony i zakończony przed przydzieleniem nowego zadania wsadowego.

Jest to ważne ustawienie. Informacje podstawowe: Wyrażenia są uruchamiane współbieżnie, bez ustalonej kolejności, w kilku wątkach i w kilku węzłach jednocześnie, ale zawsze w kolejności chronologicznej z uwzględnieniem zależności. Jeśli na przykład dwa wyrażenia w kolejce nie są powiązane, mogą zostać wykonane w innej kolejności niż zostały dodane. W rezultacie pozycje wyrażenia mogą nie zostać wykonane, jeśli istnieją przed nim niewykonane instancje wyrażenia lub pozycje, od wartości których zależy wyrażenie. Takie działanie oraz współbieżność wymagają przydzielania w celu uniknięcia kolizji, niepoprawnej kolejności i nadmiarowej pracy.

Przydzielanie jest kosztowną operacją, dlatego wiele wyrażeń jest przydzielanych razem zgodnie z powyższym wymaganiem oraz pod warunkiem, że są wykonywane w podanej kolejności. Jeśli zostanie przydzielonych wiele wyrażeń, nakład pracy związany z przydziałem jest rezerwowany, ale to „blokuje” współbieżność (i odwrotnie). Ogólną zasadą jest zmniejszanie tej wartości, jeśli wyrażenia tworzą długie łańcuchy zależności, i zwiększanie w przypadku krótkich wyrażeń lub małej liczby zależności. Wartość tę można zmienić w czasie wykonywania i dlatego należy przeprowadzać jej strojenie, dopóki nie zostanie znaleziona odpowiednia wartość optymalna. Wartości mniejsze niż 10 lub większe od 200 rzadko są optymalne.

formula.cleanup.interval ms 1 800 000 Nie Częstotliwość czyszczenia kolejki wyrażeń. Wymuszane są tu ustawienia maxage i maxsize. Zwykle przeprowadzane jest tylko czyszczenie kolejki. Pierwsza operacja czyszczenia następuje w momencie uruchamiania serwera i wtedy wykonywana jest specjalna konserwacja. Ponadto co dwa tygodnie przeprowadzane jest sprawdzenie integralności wyrażenia licznika czasu (w nocy). Większość wartości domyślnych czasu jest uzasadniona. Jeśli przepustowość jest wysoka, operacja czyszczenia trwa dłużej, ale powinna być przeprowadzana częściej (i odwrotnie). Należy unikać zbytniego zwiększania tego czasu, ponieważ może prowadzić to do przestojów wykonywania i spadku wydajności, jeśli nagle obciążenie zostanie znacznie zwiększone (na przykład po imporcie lub dodaniu atrybutu).
formula.background.interval ms 10 000 Nie Częstotliwość sprawdzania w kolejce wyrażeń nowych nieprzydzielonych wyrażeń do uruchomienia. Po zakończeniu zadania wsadowego nowe sprawdzanie jest przeprowadzane natychmiast, bez oczekiwania przez zadany czas. Jeśli kolejka nadal zawiera niewartościowane pozycje przed nadejściem następnego odstępu czasu, tworzony jest proces nowego wątku roboczego w celu zwiększenia nakładu pracy. We wcześniejszych wersjach produktu Rational Focal Point wykonywanie było asynchroniczne i natychmiastowe. Gdy wyrażenie było przenoszone do bazy danych, nie było to już możliwe bez ryzyka zakleszczeń. Jest to odstęp czasu, w którym w kolejce wyrażeń są sprawdzane nowe wyrażenia do uruchomienia, to jest maksymalny czas (razem z czasem wykonywania), przez jaki użytkownik musi czekać (odświeżać) na wykonanie wyrażenia. Odpytywanie w poszukiwaniu niewartościowanych pozycji kolejki nie jest czasochłonne, jeśli takich pozycji nie ma, dlatego ten czas nie powinien być długi. Jednak jeśli odstęp czasu jest za krótki, operacja ta niepotrzebnie zużywa zasoby. Wpływa to również na skalowanie współbieżności. Jeśli wątek roboczy uruchomiony w poprzednim odstępie czasu nie został w nim zakończony, zostaje uruchomiony inny wątek (aż do osiągnięcia wartości thread.per.nodes). Jeśli tempo skalowania jest zbyt niskie lub jeśli są wymagane niższe opóźnienia wartościowania, można obniżyć tę liczbę. Jeśli wyrażenia są rzadko używane, można ją nieco zwiększyć.
formula.max.background.threads.per.node count 2 Nie Maksymalna liczba współbieżnych wątków uruchamiających wyrażenia dla każdego węzła. Rzeczywista maksymalna liczba jest dynamicznie uzależniona od tego, czy istnieją wolne wątki w puli wątków aplikacji. Skalowanie współbieżności opisane w ustawieniu background.interval zwiększa liczbę wątków wartościowania wyrażenia w węźle w każdym odstępie czasu, jeśli jest więcej pracy do wykonania. Wymagane są wolne wątki w puli wątków aplikacji, a ich liczba jest automatycznie strojona względem liczby rdzeni procesora (wirtualnych lub fizycznych). Istnieje również ograniczenie nakazujące nie zużywać ostatniego wątku w puli. Użytkownik może eksperymentować z tą liczbą. Nie można jednak zagwarantować lepszej wydajności, ponieważ zależy ona przede wszystkim od koniecznych do utrzymywania zdolności do współbieżności bazy danych. Jeśli w kolejce częściej znajdują się wyrażenia, które nie zostały wartościowane, oznacza to, że wartość ta jest zbyt niska, a obciążenie bazy danych jest małe.
formula.cleanup.enabled wartość boolowska true Tak Czyszczenie kolejki wyrażeń jest domyślnie włączone. Nie należy wyłączać tej operacji. Wyjątkiem są cele związane z debugowaniem lub uruchamianiem pomiarów wydajności, gdy należy wykluczyć czyszczenie. Tego ustawienia nie należy dostrajać. Nigdy nie należy też go zmieniać. Należy pozostawić wartość domyślną true.

* W kolumnie Środowisko wykonawcze wskazano, czy ustawienie aplikacji obowiązuje w czasie wykonywania (wartość Tak) czy tylko w czasie uruchamiania (wartość Nie).


Opinia