Sunspot-Solr замедляется до зверя, как только мое приложение поднялось до> 1000 объектов [Solr Logs Included] - PullRequest
4 голосов
/ 03 февраля 2011

Мне любопытно, если кто-нибудь заметил какие-либо проблемы с масштабированием с Sunspot-Solr. Даже если я удаляю все доступные для поиска параметры, и он просто подсчитывается против необработанного класса; загрузка по-прежнему занимает от 5 до 8 секунд на моем локальном компьютере, от 4 до 5 секунд на производстве.

Кто-нибудь еще мог масштабировать Sunspot-Solr? Какие распространенные проблемы?

Как можно заглянуть в это глубже?

Вот журналы Solr для одного запроса:

Solr Select (208.1ms)   {:rows=>20, :start=>0, :q=>"*:*", :sort=>"score desc", :fq=>["type:Organization", "published_b:true", "updated_at_d:[2009\\-02\\-03T16\\:11\\:55Z TO *]"]}

Solr Select (5.5ms)   {:rows=>20, :start=>0, :q=>"*:*", :sort=>"score desc", :fq=>["type:Organization", "published_b:true", "updated_at_d:[2009\\-02\\-03T16\\:11\\:55Z TO *]"]}

Solr Update (12.6ms)   <?xml version="1.0" encoding="UTF-8"?><add><doc><field name="type">User</field><field name="type">ActiveRecord::Base</field><field name="id">User 2</field><field name="class_name">User</field><field name="first_name_s">Bob</field><field name="created_at_d">2009-09-28T21:00:27Z</field><field name="last_name_s">Marley</field><field name="email_s">bob.marley@gmail.com</field><field name="name_s">Bob Marley</field><field name="last_name_text">Marley</field><field name="first_name_text">Bob</field><field name="email_text">bob.marley@gmail.com</field><field name="name_text">Bob Marley</field></doc></add>


Solr Update (487.7ms)   <?xml version="1.0" encoding="UTF-8"?><commit/>
Completed in 12632ms (View: 11633, DB: 228) | 200 OK [http://localhost/organizations/search]

Ответы [ 2 ]

19 голосов
/ 04 февраля 2011

1000 объектов - детская игра для Solr, поэтому здесь происходит что-то подозрительное с чтением ~ 200ms Solr. Тем не менее, ваша самая непосредственная проблема заключается в том, что вы пишете Solr во время того, что выглядит как запрос GET - что с этим? Вы сохраняете объект поиска, который запускает автоиндекс Sunspot? Если вам необходимо обновить модели во время запроса GET (что, возможно, следует выполнить в фоновом режиме, если это возможно), вы можете отключить автоматическую индексацию в Sunspot:

searchable :auto_index => false
  # sunspot setup
end

Тогда вам нужно явно вызвать my_model.index в ваших контроллерах, когда вы действительно хотите обновить их в Solr.

Наконец, это большое обновление в конце - это фиксация Solr, которая говорит Solr записывать неустановленные изменения на диск и загружать новый поисковик, который отражает эти изменения. Коммиты стоят дорого; Sunspot :: Rails по умолчанию выполняет фиксацию в конце любого запроса, который пишет Solr, но это поведение нацелено на принцип наименьшего удивления для новых пользователей Sunspot, а не на живое приложение в производстве. Вы хотите отключить его в вашем config/sunspot.yml:

auto_commit_after_request: false

Затем вы, вероятно, захотите настроить autoCommit в своем solr/conf/solrconfig.xml - он закомментирован в стандартном выпуске Sunspot Solr, и там тоже есть объяснение. Я обнаружил, что раз в минуту это хорошее место для начала.

После внесения этих изменений я бы посмотрел, все ли ваши чтения все еще медленны - я думаю, вполне возможно, что причина в том, что каждый раз, когда вы выполняете поиск, ваша запись / коммит в Solr заставляя его загружать свежий диск с диска. Таким образом, он не может позволить любому из своих внутренних кешей нагреться и т. Д., И, как правило, испытывает огромное напряжение.

Надеюсь, это поможет!

2 голосов
/ 23 июня 2016

Когда у меня возникали длительные запросы во время коммитов обновлений, я наткнулся на этот блог

mytechmembank.blogspot.de

, и оказалось, что мне пришлось изменитьследующее:

 Performance killer:
<str name="buildOnCommit">true</str>

Way to go:
<str name="buildOnCommit">false</str>

в solrconfig.xml

...