【发布时间】:2017-02-20 17:51:42
【问题描述】:
我们有一个包含以下详细信息的集群: 1. 操作系统:Windows 7(64 位) 2.节点数:2(i7处理器,8Gb RAM) 3. ES版本:2.4.4
我们创建了一个包含以下详细信息的索引: 1. 索引大小:86 Gb 2.分片数量:12 3.副本数:无 5.文档数量:1.4亿 6. 字段数:15 6.对于大部分我们设置的字段“index”:“not_analyzed” 7.对于我们设置的少数字段“索引”:“否” 8. 我们不执行任何全文搜索、聚合或排序 9. 对于 2 个字段,我们使用编辑距离 1 的模糊性
12 个分片均匀分布在 2 个节点上(每个节点 6 个分片)。我们正在这个集群上运行多重搜索查询,其中每个多重搜索请求包含 6 个单独的查询。
我们的查询花费了太多时间来执行。从“took”字段中,我们可以看到每个单独的查询花费的时间在 3-8 秒的范围内。它们很少以毫秒为单位执行。
平均。结果集中返回的记录数约为 800 条(最多 10k 条记录,最少 10 条记录)。
当我们在相对较小的数据集(1000 万条记录,大小为 7 Gb)上运行相同的测试时,每个单独的查询花费的时间在 50-200 毫秒的范围内。 有人可以建议在索引大小增加时可能导致我们的查询运行缓慢的原因吗?
xeraa响应后更新:
- 也许您也在使用旋转磁盘?
- 是的
- 800 个文档(或更多)听起来很多。你总是需要那么多吗?
- 并非所有查询都返回大量文档,但我们确实需要所有这些文档。
- 您是否将堆大小设置为 4GB(可用内存的一半)?
- 是的
- 为什么是 12 个分片?如果您只有 2 个节点,这听起来有点过分(但可能不会有太大的不同)。
- 这样我们以后可以随着数据的增长添加更多节点(无需重新索引)。
-
也许你可以显示一个查询?您的 6 个单独查询听起来很昂贵
- 以下是使用的 2 个示例查询。总共有 6 个类似的查询被包含在多重搜索中。
POST /_msearch {“索引”:“学校”} { “询问”: { “布尔”:{ “必须” : [ { “布尔”:{ “应该” : { “范围” : { “分数” : { “来自”:“100000000”, “到”:“200000000”, “include_lower”:是的, “include_upper”:真 } } } } }, { “嵌套”:{ “询问” : { “匹配” : { “查询”:“25”, “字段”:[“subject.chapter”]}}, “路径”:“主题” } } ] } } } {“索引”:“学校”} { “询问”: { “布尔”:{ “必须” : { “嵌套”:{ “询问” : { “匹配” : { “查询”:“A100123”, “字段”:[“student.id”], “模糊”:“1” } }, “路径”:“学生” } } } } }
【问题讨论】:
标签: elasticsearch