我们有一个包含4个分片的solr云设置(每个物理机一个分片),包含大约1亿个文档。Zookeeper在这四台机器中的一台上。我们遇到通配符和邻近搜索结合在一起的复杂查询,有时需要超过15秒才能获得前100个文档。目前查询流量非常低(每分钟2-3次查询)。4台托管云的服务器规格如下:(2台-> 64GBRAM,24CPU核,2.4 GHz) + (2台-> 48GBRAM,24CPU核,2.4 GHz)。
我们为每个分片提供8 GB的JVM内存。每台机器的SSD上的510 GB索引(总计4*510 GB= 2.4TB)映射到每台服务器上剩余RAM上的操作系统磁盘缓存。所以我想RAM对我们来说不是问题。
现在值得注意的是:当一个查询被触发到云端时,只有一个CPU核心的利用率是100%,其余的都是0%。在所有机器上都会复制相同的行为。这些机器上没有其他进程在运行。
solr不是应该做一些多线程来利用CPU核心吗?我是否可以增加每次查询的CPU消耗,因为流量不是问题。如果是这样的话,是怎么做的?
发布于 2015-02-15 06:45:51
对Solr分片的单个请求在很大程度上是单线程处理的(您可以为多个字段设置分面线程)。经验法则是将分片的文档数保持在不超过几亿。这远远低于25M/shard,但正如您所说,您的查询很复杂。您所看到的是单线程处理的简单效果。
您的问题的解决方案是使用更多分片,因为所有分片都是并行查询的。由于您有大量空闲的CPU核心,而通信量很少,因此您可能希望尝试在每台机器上运行10个分片。对于SolrCloud来说,总共使用40个分片不是问题,与繁重的查询相比,增加的合并开销应该是微不足道的。
https://stackoverflow.com/questions/28432866
复制相似问题