我有一个 9 核的 SOLR。 其中一个核心拥有大约 1,000,000 个文档。 (~1GB 大小)
完成向该核心提交 100 个文档后,我对 SOLR 中所有其他核心的接下来 20 -40 次查询变得非常慢(3 到 8 秒)
我使用数据导入处理程序每 10 分钟添加约 100 个文档,然后提交(不优化)索引。
- 有没有办法减少索引后立即执行的查询的查询时间?
- 考虑到所有其他核心执行查询的速度很慢,这可能是硬件问题,还是因为我有很多核心而出现问题。
我平均每秒对所有核心执行 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" />
对于 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
最佳答案
你正在预热。这是在提交后减少查询时间的唯一方法。您可能需要进行预热才能在缓存中获取正确的文档/查询/过滤器,但您已经在朝着正确的方向前进。
我的猜测是,由于提交而导致的索引翻转,再加上缓存预热,正在占用您所有的 CPU 和 IO。结果是您的其他核心无法获得足够的资源来快速响应。在提交期间,您的内存使用量将迅速飙升,因为在一段时间内 Solr 中有 2 个索引副本。根据您的内存使用情况,您甚至可能会进行交换,这会对查询时间造成极大的破坏。
在提交期间进行一些 CPU 和内存分析。确保你没有交换。查看 CPU 核心是否被固定。您很可能需要投入更多的硬件来解决这个问题,或者考虑将您的核心分散到不同的机器上,这样它们就不会受到影响。
关于solr - 减少索引后立即执行的查询的 SOLR 查询时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127745/