[英]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的写入/提交都会导致它必须加载新的来自磁盘的搜索者。 因此,它不能允许任何内部缓存加热等,并且通常会承受巨大的压力。
希望有所帮助!
当我在更新提交期间遇到长时间请求时,我偶然发现了这个博客
事实证明我必须改变以下内容:
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.