elasticsearch,为什么“选择*从我的索引限制1”需要这么长时间?

aiazj4mn  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(338)

我有一个大小适中的es索引(10tb),在50台机器上有50个分区(每个分区1个),接近10b行。机器是顶级的(aws上最大的)。每个es示例的ram设置为30 gb。
每当我运行一个非常简单的查询时,例如:

POST /my_index/_search
{
  "size": 1, 
  "query": {
    "match_all": {}
  }
}

它需要2到20多秒(我甚至得到502):
响应

{
  "took" : 17584,
  "timed_out" : false,
  "_shards" : {
    "total" : 50,
    "successful" : 50,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 1.0,
    "hits" : [
      {

有没有办法加快速度?我注意到limit子句在elasticsearch中效果不好(或者更好,我可能没有正确使用它)

wh6knrhe

wh6knrhe1#

有趣的es性能问题,请澄清几件事,根据我的理解我会尽量解释的事情
当您提到每个es示例的ram设置为30gb时,我猜您的意思是es堆大小是30gb,而不是es节点的ram大小?根据经验法则,将节点的50%ram分配给es堆大小,并且它(es堆)不应超过32GB。
希望您在高峰时间和非高峰时间尝试过此查询,并且您的范围包括这两个时间段?
现在,有一些建议可以加快您的搜索查询
尝试减少索引的碎片数,目前是50个碎片,这意味着协调节点必须从50个节点收集搜索结果(每个节点1个碎片的情况),节点间的通信可能需要相当长的时间。
写一些小技巧来提高搜索性能,看看你是否可以应用到你的集群,索引

相关问题