【问题标题】:Do multiple Solr shards on a single machine improve performance?单台机器上的多个 Solr 分片会提高性能吗?
【发布时间】:2012-03-23 20:05:06
【问题描述】:

在一台机器上运行多个 Solr 分片会提高性能吗?我希望 Lucene 是多线程的,但它似乎并没有在我的服务器上使用超过 16 个物理内核的单个内核。我意识到这取决于工作负载,但任何统计数据或基准测试都会非常有用!

【问题讨论】:

  • 你昨天有没有阅读黑客新闻? carsabi.com/car-news/2012/03/23/…
  • 是的,我写的 :) 我希望其他人有一些我可以比较的统计数据
  • @cberner 这对于指数的表现是真的,还是完全不同的动物?我需要经常使用用户内容更新我的索引,并希望加快速度。
  • @ted.strauss 我没有用索引测试它,因为我们每秒只索引几十或几百个项目。我的猜测是索引是不同的,并且不会受益,但这只是一个猜测。但是,如果您需要近乎实时的更新,我发现对索引有很大帮助的一件事是启用软提交
  • @cberner 感谢您的帮助 cmets。尤其是因为我的问题很迟钝stackoverflow.com/q/13500955/241677

标签: performance solr lucene


【解决方案1】:

我运行了一些benchmarks of our search stack,发现添加更多 Solr 分片(在一台机器上,具有 16 个物理内核)确实将性能提高到大约 8 个分片(我得到了 6.5 倍的速度提升)。这是一个包含约 150 万个文档的索引,运行复杂的范围查询。

因此,在针对单个索引运行查询时,Solr 似乎没有利用多个物理内核。

【讨论】:

  • 由于您的索引适合 I/O 缓存,因此分片可以改善延迟。但这不应该是一个普遍的建议:更大的索引会发生什么?在实时环境中?而且您没有全程测量,当并发级别增加时会发生什么?您能否再次进行实验,但使用更多的线程向 Solr 发送查询? (例如 20 个)
  • 我不知道更大的索引,但对于实时搜索,我会提高索引性能,因为写入将分布在多个分片上。下周我将尝试运行一些吞吐量测试。不过我不认为会有太大的差异,因为分片的开销是
【解决方案2】:

如果您当前有一个带有单个分片的盒子,则将该分片拆分为多个分片:

  • 可能会降低吞吐量,
  • 可以通过并行化查询执行来改善延迟。

我无法为您提供统计数据或基准,因为这取决于查询执行是受 CPU 限制还是 I/O 限制:如果查询执行已经受 I/O 限制在一个盒子上,那么将分片分成几个分片甚至会恶化吞吐量。您需要自己进行测试,只需获取生产日志并尝试在两种场景中重放即可。

【讨论】:

  • 看我上面的回答,它实际上似乎确实提高了性能,甚至显着。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多