我有一个9核的SOLR。 其中一个核心有大约1 000 000个文件。 (~1gb大小)
在完成向该核心提交100个文档之后,我对SOLR中所有其他核心的下一个20-40查询变得非常慢(3到8秒)
我使用数据导入处理程序每10分钟添加约100个文档,然后提交(不优化)索引。
我平均每秒对所有核心进行20次查询。 我在SOLR上使用Jetty 我有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" />
对于newSearcher和firstSearcher,我有50个查询来为新搜索者自动装配。
<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
答案 0 :(得分:3)
你正在预热。这是在提交后立即减少查询时间的唯一方法。您可能需要处理升温以在缓存中获取正确的文档/查询/过滤器,但您已经朝着正确的方向前进。
我的猜测是,由于提交而导致的索引翻转,加上缓存预热会吸收所有CPU和IO。结果是您的其他核心没有获得足够的资源来快速响应。在提交期间,您的内存使用量将迅速增加,因为在一段时间内Solr中有2个索引副本。根据您的内存使用情况,您甚至可以进行交换,这对查询时间来说具有极大的破坏性。
在提交期间执行一些CPU和内存分析。确保你没有交换。查看CPU内核是否被挂起。您可能需要在此问题上投入更多硬件,或者考虑将核心扩展到不同的计算机,以免影响它们。