Lucene 提高Solr性能

Lucene 提高Solr性能,lucene,solr,performance,jetty,Lucene,Solr,Performance,Jetty,我部署了一个5分片基础架构,其中: shard1有3124422个文档 shard2有920414个文档 shard3有602772个文档 shard4有2083492个文档 shard5有11915639个文档 索引总大小:100GB 操作系统是Linux x86_64 Fedora release 8,vMem等于7872420,我使用来自Solr的Jetty运行服务器示例下载: java-Xmx3024M-Dsolr.solr.home=multicore-jarstart.jar 查询的

我部署了一个5分片基础架构,其中: shard1有3124422个文档 shard2有920414个文档 shard3有602772个文档 shard4有2083492个文档 shard5有11915639个文档 索引总大小:100GB

操作系统是Linux x86_64 Fedora release 8,vMem等于7872420,我使用来自Solr的Jetty运行服务器示例下载: java-Xmx3024M-Dsolr.solr.home=multicore-jarstart.jar

查询的响应时间约为2-3秒。但是,如果同时执行多个查询,性能会立即下降: 1同时查询:2516ms 2同时查询:42504469毫秒 3个同时查询:578162196219ms 4个同时查询:648472037719781毫秒

使用JConsole监视服务器java进程时,我检查了堆内存和CPU使用量没有达到上限,因此服务器不应执行过载。谁能给我一个方法,我应该如何调整实例,使其不太依赖于同时查询的数量


预先感谢

< P>你可能想考虑为每个碎片创建奴隶,这样你就可以支持更多的阅读,但是,你得到的表现不是很合理。

根据您看到的响应时间,感觉您的磁盘一定是瓶颈。对您来说,只需为每个碎片加载足够的内存以容纳每个20GB的完整索引,可能会更便宜?。您可以使用sysstat包中的“sar”实用程序查看磁盘访问。如果在搜索过程中,任何磁盘上的磁盘利用率始终超过30%,这是一个好迹象,表明您需要添加一些内存,并让操作系统缓存索引


您已经有一段时间没有运行优化了吗?也许长时间查找的一部分是一个严重碎片化的指数散布在盘片上的结果。

< P>你可能想考虑为每个碎片创建奴隶,这样你就可以支持更多的读取,但是,你得到的性能不是很合理。 根据您看到的响应时间,感觉您的磁盘一定是瓶颈。对您来说,只需为每个碎片加载足够的内存以容纳每个20GB的完整索引,可能会更便宜?。您可以使用sysstat包中的“sar”实用程序查看磁盘访问。如果在搜索过程中,任何磁盘上的磁盘利用率始终超过30%,这是一个好迹象,表明您需要添加一些内存,并让操作系统缓存索引


您已经有一段时间没有运行优化了吗?可能查找时间过长的部分原因是整个盘片上的索引碎片太多。

正如我在Solr mailinglist上所说的那样,Solr/Lucene从SSD中受益匪浅。虽然在更多的机器上分片或添加RAM的引导负载可以用于I/O,但SSD选项相对便宜且非常简单


在NewEgg以160GB的价格以409美元购买Intel X25 G2或基于SandForce的新SSD。将现有的100GB索引放在上面,看看会发生什么。最多要工作半天。如果它爆炸,清理工作站的驱动器。您会对它给您带来的性能提升感到非常满意。

正如我在Solr邮件列表中所说的,三天前您在邮件列表中提出了同样的问题,Solr/Lucene从SSD中获得了巨大的好处。虽然在更多的机器上分片或添加RAM的引导负载可以用于I/O,但SSD选项相对便宜且非常简单


在NewEgg以160GB的价格以409美元购买Intel X25 G2或基于SandForce的新SSD。将现有的100GB索引放在上面,看看会发生什么。最多要工作半天。如果它爆炸,清理工作站的驱动器。您会对它给您带来的性能提升感到非常满意。

您是否参考了启动成本,或者您所看到的问题是否一致,现在还不清楚您的多核设置是否正确?这个问题是一贯存在的,它正在成为一个非常令人头痛的问题,因为响应时间完全取决于同时搜索的客户数量。考虑到我一直在运行用于索引和搜索数据的批处理,设置是正确的。问题是查询结果的性能…这些数字看起来与单线程中运行的大部分查询非常一致。你能检查一下iotop,看看你的磁盘受到了多少冲击吗?这可能是一个缓存损坏问题,解决方案可能是更多内存这是一个“碰撞”还是重复?如果您指的是启动成本,或者您看到的是一个一致的问题,则有点不清楚您的多核设置是否正确?这个问题是一贯存在的,它正在成为一个非常令人头痛的问题,因为响应时间完全取决于同时搜索的客户数量。考虑到我一直在为inde运行批处理,设置是正确的
搜索数据。问题是查询结果的性能…这些数字看起来与单线程中运行的大部分查询非常一致。你能检查一下iotop,看看你的磁盘受到了多少冲击吗?这可能是一个缓存破坏问题,解决方案是增加内存。这是一个“碰撞”还是重复?谢谢你的想法。这是一个有趣的问题,但是这个系统是在云中运行的。不过,我会在未来的项目中考虑到这一点。谢谢你的想法。这是一个有趣的问题,但是这个系统是在云中运行的。不过,我会在未来的项目中考虑到这一点。