web-dev-qa-db-ja.com

FIELDDATAデータが大きすぎます

キバナを開いて検索すると、シャードが失敗したというエラーが表示されます。 elasticsearch.logファイルを調べたところ、次のエラーが発生しました。

org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb]

593.9MBの制限を増やす方法はありますか?

13
lezzago

elasticsearch.yml構成ファイルで fielddata回路ブレーカー 制限を75%(デフォルトは60%)に増やして、クラスターを再起動してみてください。

indices.breaker.fielddata.limit: 75%

または、クラスターを再起動しない場合は、次を使用して設定を動的に変更できます。

curl -XPUT localhost:9200/_cluster/settings -d '{
  "persistent" : {
    "indices.breaker.fielddata.limit" : "40%" 
  }
}'

試してみる。

20
Val

CircuitBreakingException: [FIELDDATA] Data too largeエラーの代替ソリューションは、古い/未使用のFIELDDATAキャッシュをクリーンアップすることです。

fielddata.limitがインデックス間で共有されていることがわかりました。そのため、未使用のインデックス/フィールドのキャッシュを削除すると問題が解決する場合があります。

curl -X POST "localhost:9200/MY_INDICE/_cache/clear?fields=foo,bar"

詳細情報 https://www.elastic.co/guide/en/elasticsearch/reference/7.x/indices-clearcache.html

1
giltsl

私もこの問題に出会います。次に、fielddataメモリを確認します。

リクエストの下で使用:

GET /_stats/fielddata?fields=*

出力表示:

"logstash-2016.04.02": {
  "primaries": {
    "fielddata": {
      "memory_size_in_bytes": 53009116,
      "evictions": 0,
      "fields": {

      }
    }
  },
  "total": {
    "fielddata": {
      "memory_size_in_bytes": 53009116,
      "evictions": 0,
      "fields": {

      }
    }
  }
},
"logstash-2016.04.29": {
  "primaries": {
    "fielddata": {
      "memory_size_in_bytes":0,
      "evictions": 0,
      "fields": {

      }
    }
  },
  "total": {
    "fielddata": {
      "memory_size_in_bytes":0,
      "evictions": 0,
      "fields": {

      }
    }
  }
},

あなたは私のインデックス名ベース日時を見ることができ、エビクションはすべて0です。追加、2016.04.02メモリは53009116ですが、2016.04.29も0です。

結論を出すことができます、古いデータがすべてのメモリを占有しているため、新しいデータはそれを使用できません。次に、aggクエリに新しいデータを作成すると、CircuitBreakingExceptionが発生します。

あなたはconfig/elasticsearch.ymlを設定することができます

indices.fielddata.cache.size:  20%

メモリの上限に達したときに、データを削除できるようにします。

しかし、将来的にメモリを追加する必要がある本当の解決策になる可能性があります。フィールドデータのメモリ使用量を監視することは良い習慣です。

詳細: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limited_memory_usage.html

1
shangliuyan

ただ使用する:

ES_Java_OPTS="-Xms10g -Xmx10g" ./bin/elasticsearch

デフォルトのヒープは1Gであるため、データが大きい場合は、より大きく設定する必要があります

0
xiangli wu

先日この問題に遭遇しました。フィールドデータのメモリをチェックするだけでなく、JVMとOSのメモリもチェックすることを検討します。私の場合、管理者はES_HEAP_SIZEを変更するのを忘れて、1gigのままにしました。

0
Glenak1911

そもそもなぜこれが起こっているのかを理解することが重要だと思います。

私の場合、"analyzed"フィールドで集計を実行していたため、このエラーが発生しました。文字列フィールドを本当にanalyzedにする必要がある場合は、マルチフィールドの使用を検討して、検索の場合はanalyzed、集計の場合はnot_analyzedにする必要があります。

0
elachell