сократить время запросов SOLR для запросов, выполняемых сразу после индексации - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть SOLR с 9 ядрами. В одном из основных около 1 000 000 документов. (Размер ~ 1 ГБ)

После завершения фиксации в этом ядре 100 документов мои следующие 20-40 запросов ко всем другим ядрам в SOLR становятся очень медленными (от 3 до 8 секунд)

Я добавляю ~ 100 документов каждые 10 минут с помощью обработчика импорта данных, а затем фиксирую (без оптимизации) индекс.

  1. Есть ли способ сократить время выполнения запросов, выполняемых сразу после индексации?
  2. Может ли это быть аппаратной проблемой, учитывая, что все другие ядра выполняют запросы медленно, или проблема в том, что у меня много ядер.

У меня в среднем 20 запросов в секунду ко всем ядрам. Я использую Jetty с SOLR У меня есть mergeFactor = 10

<mergeFactor>10</mergeFactor>

Я установил счетчик автоматического подогрева для кэша

<filterCache
    class="solr.FastLRUCache"
    size="1048576"
    initialSize="131072"
    autowarmCount="943718"/>

<documentCache
  class="solr.FastLRUCache" cleanupThread="true"
  size="131072"
  initialSize="117965"
  autowarmCount="117965" />

У меня есть 50 запросов для автоматического разогрева нового поисковика, как для newSearcher, так и для firstSearcher.

<listener event="newSearcher" class="solr.QuerySenderListener">
  <arr name="queries">
    <str name="q">cake+boss</str><str name="facet">true</str><str name="facet.field">Category</str></lst>
     ...// 50 warm-up queries
  </arr>
</listener>
//the same for firstSearcher 

1 Ответ

3 голосов
/ 03 февраля 2012

Вы предварительно прогреваетесь. Это единственный способ уменьшить время запроса сразу после коммита. Возможно, вам придется поработать над потеплением, чтобы получить нужные документы / запросы / фильтры в кеше, но вы уже идете в правильном направлении.

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

Выполните небольшое профилирование процессора и памяти во время коммита. Убедитесь, что вы не поменялись местами. Посмотрите, не привязаны ли ядра процессора. Скорее всего, вам нужно использовать больше оборудования для решения этой проблемы или рассмотреть вопрос о распределении ваших ядер на разные машины, чтобы они не пострадали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...