数据大小增加时,Elasticsearch执行缓慢

时间:2017-02-20 17:51:42

标签: elasticsearch

我们有一个包含以下详细信息的群集: 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.对于我们设置的几个字段" index":" no" 8.我们没有执行任何全文搜索,聚合或排序 9.对于2个字段,我们使用编辑距离1的模糊性

12个分片均匀分布在2个节点上(每个节点6个分片)。我们正在此群集上运行多搜索查询,其中每个多搜索请求包含6个单独的查询。

我们的查询花费了太多时间来执行。来自"采取"字段我们可以看到每个单独的查询花费的时间在3-8秒的范围内。他们很少在几毫秒内执行。

平均。结果集中返回的记录数大约为800(最多10k记录和最少10条记录)。

当我们对相对较小的数据集(1000万条大小为7 Gb的记录)运行相同的测试时,每个单独的查询花费的时间在50-200毫秒的范围内。 当索引大小增加时,有人会建议可能导致查询运行缓慢的原因吗?

xeraa响应后更新:

  1. 也许你也在使用旋转磁盘?
  2. 800个文件(或更多)听起来很多。你总是需要那么多吗?
    • 并非只有少数个别查询会返回大量文档,我们确实需要所有这些文档。
  3. 您是否将堆大小设置为4GB(可用内存的一半)?
  4. 为什么要12个碎片?如果你只有2个节点,这听起来有点太多了(但可能没有太大的区别)。
    • 因此,随着数据的增长,我们可以在以后添加更多节点(无需重新索引)。
  5. 也许您可以展示查询? 6个人的查询听起来很昂贵

    • 以下是使用的2个示例查询。在多次搜索中总共包含6个类似的查询。

    POST / _msearch     {"指数" :"学校"}     {       "查询":{       "布尔" :{         "必须" :[{           "布尔" :{             "应该" :{               "范围" :{                 "马克" :{                   "从" :" 100000000",                   "至" :" 200000000",                   " include_lower" :真的,                   " include_upper" :是的                }}}},} {           "嵌套" :{             "查询" :{               "匹配" :{                 "查询" :" 25",                 "字段" :[" subject.chapter" ]}},             "路径" :"主题"           }}]}}     }     {"指数" :"学校"}     {       "查询&#34 ;:     {       "布尔" :{         "必须" :{           "嵌套" :{             "查询" :{               "匹配" :{                 "查询" :" A100123",                 "字段" :[" student.id" ]                 "模糊" :" 1"               },             "路径" :"学生"           }}}}     }

1 个答案:

答案 0 :(得分:0)

1.4亿份文件意味着86GB的数据然后我想1000万份文件转化为少于8GB的数据。因此,较小的数据集可以从内存中提供(至少主要是两个8GB节点),而较大的数据集需要从磁盘提供。也许你也在使用旋转磁盘?在任何情况下,物理定律都会使您的完整数据集比较小的数据集慢。

你可以研究各种各样的事情:

  • 800个文件(或更多)听起来很多。你总是需要这么多吗?
  • 您是否将堆大小设置为4GB(可用内存的一半)?
  • 为什么要12个碎片?如果你只有2个节点,这听起来有点太多了(但可能没有太大的区别)。
  • 也许你可以展示一个查询?您的6个人查询听起来很昂贵