【发布时间】:2014-12-24 12:46:25
【问题描述】:
我有一台 12 核、2.4GHz 和 64GB RAM 的服务器。我有 8 个分片,每个分片在同一台机器上大约 400GB 大小。总索引大约占用 4TB SSD 的 3TB 空间。
我正在使用一些复杂的操作,如突出显示、分面、分组,查询性能非常慢(几秒到几分钟)
如果我增加分片的数量,会提高性能吗?有没有办法在不拆分多台机器上的分片的情况下提高性能?
【问题讨论】:
标签: performance solr
我有一台 12 核、2.4GHz 和 64GB RAM 的服务器。我有 8 个分片,每个分片在同一台机器上大约 400GB 大小。总索引大约占用 4TB SSD 的 3TB 空间。
我正在使用一些复杂的操作,如突出显示、分面、分组,查询性能非常慢(几秒到几分钟)
如果我增加分片的数量,会提高性能吗?有没有办法在不拆分多台机器上的分片的情况下提高性能?
【问题讨论】:
标签: performance solr
增加分片数量可能会降低性能,具体取决于使用情况。使用分片会产生开销,例如,每个分片可能必须检索 N 个文档才能满足“给我 N 行”的要求(因为一个分片可能包含结果集中的所有文档)。对于分面,这将必须在每个分片上生成分面,然后将它们连接到回答查询的分片上,从而产生另一个开销因素。
您可能还想查看缓存性能,看看您是否每次都在弹出缓存(.. 请记住,每个分片都有一个缓存)。
满足您要求的唯一可用答案是“试试看”(尝试不同尺寸)。如果可能的话,我会尽量避免创建人工的本地分片。分片对于在多台服务器上而不是在一台服务器内部分配索引很有用(尽管也有这样的用例 - 但据我所知,它不是性能)。
【讨论】:
SSD 极大地帮助了 Solr 所需的随机 IO,但它们并不神奇。假设你还更新了你的分片,3TB 索引的 64GB RAM 对我来说似乎动力不足。我猜你的大部分内存都是在运行 Solr 实例时使用的?
我们有一个多 TB 的 Solr 设置,用于磁盘缓存的可用内存相对较少。我们进行了一些测试,发现当磁盘缓存中的索引从 0.5% 下降到 0.1% 时,性能出现了巨大的下降。您的设置的限制可能会有所不同,但是如果您的盒子的可用内存非常少(我会挥手说 10GB),我的猜测是添加相对适度的 RAM(比如 32 或 64GB)将帮助很大。
【讨论】:
在同一台机器上进行分片不会给您带来任何性能优势,因为所有分片将共享 64Gb 的 RAM。为了获得最佳查询性能,您可能希望将整个索引存储在内存中(理想情况)。在单独的机器上部署每个分片应该可以提高查询性能。
【讨论】: