Performance 一台机器上的多个Solr碎片是否可以提高性能?

Performance 一台机器上的多个Solr碎片是否可以提高性能?,performance,solr,lucene,Performance,Solr,Lucene,在一台机器上运行多个Solr碎片是否可以提高性能?我希望Lucene是多线程的,但在我的服务器上,它似乎只使用了一个内核和16个物理内核。我意识到这取决于工作负载,但任何统计数据或基准都非常有用 如果当前有一个包含单个碎片的框,则将该碎片拆分为多个碎片: 可能会降低吞吐量 可以通过并行化查询执行来改善延迟 我无法向您提供统计数据或基准测试,因为这取决于查询执行是CPU还是I/O绑定:如果查询执行已经在单个框上绑定了I/O,那么将碎片拆分为多个碎片甚至会降低吞吐量。您需要测试自己,只需获取一个

在一台机器上运行多个Solr碎片是否可以提高性能?我希望Lucene是多线程的,但在我的服务器上,它似乎只使用了一个内核和16个物理内核。我意识到这取决于工作负载,但任何统计数据或基准都非常有用

如果当前有一个包含单个碎片的框,则将该碎片拆分为多个碎片:

  • 可能会降低吞吐量
  • 可以通过并行化查询执行来改善延迟
我无法向您提供统计数据或基准测试,因为这取决于查询执行是CPU还是I/O绑定:如果查询执行已经在单个框上绑定了I/O,那么将碎片拆分为多个碎片甚至会降低吞吐量。您需要测试自己,只需获取一个生产日志,并尝试在两个场景中重播它。

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


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

请参见上面的答案,它实际上似乎确实提高了性能,甚至显著提高了性能。由于索引适合I/O缓存,因此分片提高了延迟。但这不应该是一个一般性的建议:如果指数更大,会发生什么?在实时环境中?如果不进行全程测量,那么当并发级别增加时会发生什么?你能不能再做一次实验,但是使用更多的线程向Solr发送查询?(例如,20)我不知道是否有更大的索引,但对于实时搜索,我会提高索引性能,因为写入将分布在多个碎片上。下周,我将尝试运行一些吞吐量测试。不过,我不认为会有太大的差异,因为切分的开销小于20%,你昨天有没有读过黑客新闻?是的,我写道:)我希望其他人有一些我可以比较的数据though@cberner对于指数表现而言,这是真的还是完全不同的动物?我需要经常用用户内容更新我的索引,并希望加快速度。@ted.strauss我没有用索引测试它,因为我们每秒只索引几十或数百个项目。我的猜测是,索引是不同的,不会有任何好处,但这只是一个猜测。然而,我发现在索引方面有一件事非常有用,那就是启用软提交,如果您需要接近实时的话updates@cberner谢谢你的宝贵意见。尤其是我的问题越来越难回答了