减少索引后立即执行的查询的SOLR查询时间

时间:2012-02-03 11:12:29

标签: solr

我有一个9核的SOLR。 其中一个核心有大约1 000 000个文件。 (~1gb大小)

在完成向该核心提交100个文档之后,我对SOLR中所有其他核心的下一个20-40查询变得非常慢(3到8秒)

我使用数据导入处理程序每​​10分钟添加约100个文档,然后提交(不优化)索引。

  1. 有没有办法减少索引后立即执行的查询的查询时间?
  2. 考虑到所有其他核心执行查询的速度很慢,这是一个硬件问题,还是我遇到许多内核的问题。
  3. 我平均每秒对所有核心进行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 
    

1 个答案:

答案 0 :(得分:3)

你正在预热。这是在提交后立即减少查询时间的唯一方法。您可能需要处理升温以在缓存中获取正确的文档/查询/过滤器,但您已经朝着正确的方向前进。

我的猜测是,由于提交而导致的索引翻转,加上缓存预热会吸收所有CPU和IO。结果是您的其他核心没有获得足够的资源来快速响应。在提交期间,您的内存使用量将迅速增加,因为在一段时间内Solr中有2个索引副本。根据您的内存使用情况,您甚至可以进行交换,这对查询时间来说具有极大的破坏性。

在提交期间执行一些CPU和内存分析。确保你没有交换。查看CPU内核是否被挂起。您可能需要在此问题上投入更多硬件,或者考虑将核心扩展到不同的计算机,以免影响它们。