【问题标题】:Solr, qtime vs response timeSolr,qtime 与响应时间
【发布时间】:2015-03-12 02:29:41
【问题描述】:

我有一个 qtime 为 2-3(毫秒)的 solr 查询。但是,响应时间约为 5 秒。

  • 响应格式为 CSV,因此响应尽可能少
  • 仅返回 2 个“列”
  • Solr 版本为 4.10.3
  • 内置码头下的 Solr
  • 响应大小 ~500kb

显然,问题似乎在于将数据从 solr 发送到我的应用程序,但如果查询时间为 2 毫秒且响应仅为 ~500kb,则不应花费 5 秒。

是否有可能增加缓冲量的码头设置?还是某个地方的 solr 设置?

编辑(solrconfig.xml):

<config>
  <luceneMatchVersion>4.7</luceneMatchVersion>
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
  <dataDir>/etc/solr/default/solr/${solr.core.name}/data</dataDir>
  <schemaFactory class="ClassicIndexSchemaFactory"/>
  <updateHandler class="solr.DirectUpdateHandler2">
    <updateLog>
      <str name="dir">/etc/solr/default/solr/${solr.core.name}/data</str>
    </updateLog>
  </updateHandler>
  <requestHandler name="/get" class="solr.RealTimeGetHandler">
    <lst name="defaults">
      <str name="omitHeader">true</str>
    </lst>
  </requestHandler>

  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
  </requestDispatcher>

  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
  <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
  <requestHandler name="/update" class="solr.UpdateRequestHandler" />
  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />

  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
    <lst name="invariants">
      <str name="q">solrpingquery</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>

  <!-- term vector -->
  <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
  <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="df">text</str> <!-- config for the admin interface -->
      <bool name="tv">true</bool>
    </lst>
    <arr name="last-components">
      <str>tvComponent</str>
    </arr>
  </requestHandler>

  <!-- more like this -->
  <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler" />

  <!-- config for the admin interface -->
  <admin>
    <defaultQuery>solr</defaultQuery>
  </admin>

  <!-- caches -->
  <query>
    <filterCache class="solr.FastLRUCache"
                 size="512"
                 initialSize="512"
                 autowarmCount="0"/>

    <!-- Query Result Cache -->
    <queryResultCache class="solr.LRUCache"
                     size="512"
                     initialSize="512"
                     autowarmCount="0"/>

    <!-- Document Cache -->
    <documentCache class="solr.LRUCache"
                   size="512"
                   initialSize="512"
                   autowarmCount="0"/>
  </query>
</config>

干杯

【问题讨论】:

  • 为什么传输 500 kb 不需要 5 秒?可能是你的连接很慢?你在用 SolrCloud 吗?
  • 网络比这快很多。其他大小的传输要快得多。同样,增加数据量(至 ~1MB)会使要在网络上发送的数据量翻倍,但响应时间相似。
  • 你能显示你的 solrconfig.xml 吗?
  • 完成!我确实设法通过更高的文档缓存使这个速度提高了大约 5 倍,但如果有任何其他想法,编写响应似乎仍然很慢?

标签: solr solr4 solrcloud


【解决方案1】:

您确定这 5 秒是在服务器上花费的吗?如果您还没有这样做,一个有用的测试是从 Solr 管理界面触发查询并使用调试器(例如 firebug)来确定等待和接收花费了多少网络时间。

过去,如果您正在使用代理,我也遇到过一些代理问题,尽管这会导致响应失败而不是延迟。

【讨论】:

  • 是的,它肯定在服务器上(已使用您建议的类似方法进行了验证)。围绕它进行更多调试,我认为时间花在 SOLR 的 ResponseWriter.write 方法上。我想知道是否有任何方法可以加快速度,改变缓冲区大小等?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多