Delta Import вызывает ответ Solr, чтобы удвоить или даже хуже - PullRequest
0 голосов
/ 27 ноября 2018

SOLR VERSION 6.0.0

Spikes at delta import - every 2 hours

Наблюдается всплеск, который можно наблюдать каждые 2 часа.т. е. всякий раз, когда выполняется дельта-импорт

  1. Время отклика удваивается
  2. Средняя загрузка ЦП удваивается, а если он приближается к часу пика, то даже к 10 раз.

Мои настройки кэша:

 1. <filterCache class="solr.FastLRUCache"
                 size="5000"
                 initialSize="512"
                 autowarmCount="128"/>

    <queryResultCache class="solr.FastLRUCache"
                     size="10000"
                     initialSize="512"
                     autowarmCount="128"/>

     <documentCache class="solr.FastLRUCache"
                   size="100000"
                   initialSize="10000"
                   autowarmCount="0"/>

      <cache name="perSegFilter"
      class="solr.search.LRUCache"
      size="10"
      initialSize="0"
      autowarmCount="10"
      regenerator="solr.NoOpRegenerator" />

    <enableLazyFieldLoading>true</enableLazyFieldLoading>

    <queryResultWindowSize>20</queryResultWindowSize>
    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
    <useColdSearcher>false</useColdSearcher>

Большинство моих запросов ориентированы на ЦП, так как они включали множество запросов IN и NOT IN.Также есть, если конд для выигрыша.Предполагая, что мои запросы будут продолжать выполняться cpu cnetric.

Справка

Что я делаю не так, поскольку мой импорт дельты вызывает такой высокий отклик.

  • Размер индекса: 2 ГБ
  • Серверы: 4
  • Обслуживание: 100 тыс. В час

Дельта-обновление также приводит к обновлению 200 тыс. Записей из 1 млн как единое целоеполя solr (последний логин) часто меняется.

Мой дельта-импорт состоял из трех частей

a) delete - около 100

б) вставка - около 30 КБ

в) обновления - около 1,9 КБ (один или два столбца)

для вставки и обновления. Я использую обновление с использованием / обновление? & overwrite = true & wt = json

для удаленных stream.body = id: 1 stream.body = id: 1 .... и затем обновить

и в конце использования / update? commit = true & wt = json

Существует ли какой-либо оптимизированный способ сделать это (DIH лучше, но не оптимизирован с точки зрения производительности)

1 Ответ

0 голосов
/ 28 ноября 2018

У вас очень большие кеши и большие настройки автоподогрева.Таким образом, когда ваш импорт попадает в фиксацию, считыватели индекса должны быть вновь открыты, а кэши перестроены.А с useColdSearcher = false вы получите задержку ответа, пока все эти кэши разогреты.

Вы можете попробовать изменить этот параметр, это замедлит запросы, но не блокирует их во время прогрева.

Вы также можете поэкспериментировать с настройками мягкого и жесткого фиксирования, но помните, что мягкие фиксации сделают содержимое видимым при запуске, поэтому, если вы сначала удалите записи, а затем мягкая фиксация будет запущена в процессе переиндексации,Вы можете увидеть частичные результаты.Не так много проблем с частичным обновлением.

Другой вариант, как сказал MatsLindh, заключается в том, чтобы выполнить полный индекс в автономном режиме, а затем переключать ядра с использованием псевдонимов или механизма замены ядра.Вы даже можете всегда иметь автономное ядро ​​ reference , к которому вы индексируете, и даже оптимизировать, а затем копировать полученный индекс в рабочую среду.

...