繁体   English   中英

一旦我的应用程序爬升到> 1000个对象[包含Solr日志],Sunspot-Solr就会减速到野兽

[英]Sunspot-Solr slowing down to a beast once my Application climbed to > 1000 objects [ Solr Logs Included ]

我很好奇是否有人注意到Sunspot-Solr存在任何缩放问题。 即使我删除了所有可搜索的参数,它本身只是反对原始类; 在我的本地加载还需要5到8秒,生产时需要4到5秒。

有没有人能够扩大太阳黑子 - 索尔? 有哪些常见问题?

怎么能更深入地研究这个?

这是单个请求的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]

对于Solr来说,1000个对象是孩子们的游戏,所以这里有一些可疑的东西,大约200毫秒的Solr读取。 但是,您最直接的问题是您在看似GET请求期间写信给Solr - 这是怎么回事? 您是否正在保存可搜索的对象,这会触发Sunspot的自动索引? 如果您需要在GET请求过程中更新模型(如果可能,应该在后台作业中完成),您需要在太阳黑子中禁用自动索引:

searchable :auto_index => false
  # sunspot setup
end

然后,当您确实想要在Solr中更新它们时,您需要在控制器中显式调用my_model.index

最后,最后的大更新是Solr提交,它告诉Solr将未分级的更改写入磁盘并加载反映这些更改的新搜索器。 提交费用昂贵; 默认情况下,Sunspot :: Rails在写入Solr的任何请求结束时执行提交,但此行为针对的是Sunspot的新用户而不是生产中的实时应用程序的最小惊喜原则。 您需要在config/sunspot.yml禁用它:

auto_commit_after_request: false

然后你可能想在solr/conf/solrconfig.xml配置autoCommit - 它在默认的Sunspot Solr发行版中被注释掉,并且在那里也有解释。 我发现每分钟一次是个好地方。

在进行这些更改后,我会看到您的读取是否仍然很慢 - 我认为很可能原因是每次搜索时,您对Solr的写入/提交都会导致它必须加载新的来自磁盘的搜索者。 因此,它不能允许任何内部缓存加热等,并且通常会承受巨大的压力。

希望有所帮助!

当我在更新提交期间遇到长时间请求时,我偶然发现了这个博客

mytechmembank.blogspot.de

事实证明我必须改变以下内容:

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

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

在solrconfig.xml中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM