Skip to end of metadata
Go to start of metadata

Problemy z wydajnością indeksowania oraz pamięcią

  1. Zwiększyć wartość -Xmx parametru ES_JAVA_OPTS sekcji elasticsearch w pliku docker-compose.yml na odpowiednio wyższą wartość. 

    Kontener elastica należy zaktualizować przy użyciu polecenia:

    docker compose up
  2. W przypadku, gdy usługa Elastica znajduje się na serwerze w innej lokalizacji można zmniejszać wartość parametru "Rozmiar części" zadania zaplanowanego do indeksowania. Spowoduje to zmniejszenie requesta przesyłanego do Elastica.
  3. Spróbować zwiększyć limit przepustowości w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (domyślnie jest to 20mb):

    PUT /_cluster/settings
    {
      "persistent" : {
            "indices.store.throttle.max_bytes_per_sec" : "100mb"
       }
    }

    Na czas indeksowania można też dokonać następującej zmiany:

    PUT /_cluster/settings
    {
      "transient" : {
            "indices.store.throttle.type" : "none" 
       }
    }

    Po skończonym indeksowaniu należy ustawić wartość "merge" tym samym poleceniem.

  4. Wyłączenie swapping dla większej stabilności node'a https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup-configuration-memory.html

Obsługa Kibany

  1. Kibana uruchomiona z powyższej konfiguracji dostępna jest pod adresem: http://localhost:5601/ Dane dostępowe takie jak w elastic.properties powyżej.
  2. Przy pierwszym uruchomieniu Kibany trzeba ustawić patterny dla indeksów (process* dla procesów i activity* dla zadań).

  3. Zaindeksowane dokumenty przeglądamy w zakładce Discovery.
  4. W przypadku problemów ze zgodnością danych w elasticu (np. po zmianie typu jakiegoś indeksowanego pola) należy przejść do:

    Management -> Stack Management -> IndexManagement

    zaznaczyć wszystko (Include rollup indices i Include hidden indices muszą być odznaczone) i wybrać delete indices. Następnie trzeba przeindeksować wszystkie dokumenty zadaniem zaplanowanym.

    Uwaga! W celu usunięcia wszystkich indeksów należy użyć zadania zaplanowanego Usuwanie indeksów procesów i zadań, nie należy tego robić w Kibanie!

  5. W przypadku wystąpienia błędu:

    Validation Failed: 1: this action would add [2] shards, but this cluster currently has [1000]/[1000] maximum normal shards open;

    Należy zwiększyć parametr cluster.max_shards_per_node w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (można to również zrobić w docker-compose.yml - opisane w sekcji Konfiguracja):

    PUT /_cluster/settings
    {
      "persistent" : {
          "cluster.max_shards_per_node": "2000"
      }
    }

    Zadanie zaplanowane automatycznie dostosowuje wartość powyższego parametru (na podstawie liczby definicji procesów/zadań), jednak może być potrzeba ręcznej jego zmiany (np. w przypadku kilku instancji systemu na jednym elasticu).


    Wielkość parametru można oszacować w przypadku kilku instancji systemu. W tym celu, na każdej z baz danych należy wywołać następujące zapytanie:

    select sum(shards * 2) as minShards
    from (select count(distinct activitydefinitionid) as shards
          from activities
          UNION ALL
          select count(*)
          from (select pd.processdefinitionid, a.activitydefinitionid
                from activities a
                         join processes p on a.process = p.objectid
                         join processdefinitions pd on p.processdefinition = pd.objectid
                group by pd.processdefinitionid, a.activitydefinitionid) tmp) tmp2

    Uzyskane wyniki należy zsumować i zaokrąglić do pełnych tysięcy.

  6. W przypadku wystąpienia błędu (może wystąpić podczas usuwania procesów):

    Trying to create too many scroll contexts. Must be less than or equal to: [500]

    Należy zwiększyć parametr search.max_open_scroll_context w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (można to również zrobić w docker-compose.yml - opisane w sekcji Konfiguracja):

    PUT /_cluster/settings
    {
      "persistent" : {
          "search.max_open_scroll_context": 10000
      }
    }
  7. Usuwanie wiele indeksów na raz

    UWAGA. Usuwanie wielu indeksów bez znajomości składni może skutkować usunięciem nadmiarowej ilości danych.

    Domyślnie opcja usuwania wielu niejednoznacznych indeksów jest wyłączona.

    Aby móc korzystać z takiej opcji należy wywołać:

    PUT /_cluster/settings { "transient": { "action.destructive_requires_name":false } }

    Przykłady:

    1. Usuwanie indeksów z prefixem activity:

      DELETE /activity*


    2. Usuwanie wszystkich indeksów (ukryte indeksy nie zostaną usunięte):

      DELETE _all

      Uwaga! W celu usunięcia wszystkich indeksów należy użyć zadania zaplanowanego Usuwanie indeksów procesów i zadań, nie należy tego robić w Kibanie!

Uwagi

  1. Po usunięciu/anulowaniu procesu lub zawieszeniu/anulowaniu/przywróceniu zadania z poziomu widoku wyników wyszukiwania daną mogą nie być spójne, należy ponowne wyszukać.
  2. Wyszukiwanie zadań z użyciem pól związanych z terminami ostatecznymi nie wyszukuje tylko zadań z terminami ostatecznymi.
  3. Zmienne tabelaryczne są wyświetlane wyłącznie w ramach jednego wiersza.
  4. Jeśli wystąpi poniższy błąd podczas eksportu wyników wyszukiwania do pliku:

    java.io.IOException: entity content is too long [356732089] for the configured buffer limit [104857600]

    to należy zmniejszyć wartość parametru systemowego PackSizeInAdvanceSearchExport. 

    Błąd ten oznacza, że request przesyłany do Elastica jest za duży (domyślnie jest to 100 MB). Istnieje możliwość zwiększenia tego limitu po stronie Elastica (bez zmniejszania parametru systemowego), jednak jest to niezalecane. 

    Limit można zwiększyć w pliku docker-compose.yml w sekcji elasticsearch -> environment, dodając linijkę:

    "http.max_content_length": "200mb"

    z odpowiednią wartością rozmiaru request'a. Kontener elastica należy zaktualizować przy użyciu polecenia:

    docker compose up

Przydatne linki:

  1. Jak działa elastic - https://www.elastic.co/blog/found-elasticsearch-top-down
  2. Multi-nodes docker - https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-dev-mode
  3. Wydajność - https://www.elastic.co/guide/en/elasticsearch/reference/8.6/tune-for-indexing-speed.html
    https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html
  4. Optymalizacja wyszukiwania - https://www.elastic.co/blog/found-optimizing-elasticsearch-searches/
  5. Wymagania sprzętowe - https://www.elastic.co/guide/en/elasticsearch/guide/master/hardware.html
  6. Optymalizacja pamięci - https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup-configuration-memory.html

 

 

  • No labels