circuit_breaking_exception: CircuitBreakingException[[parent] Data too large, data for [<...>] would be [...], which is larger than the limit of [...]]
Elasticsearch의미
요청이 메모리(heap) circuit breaker 한도를 초과할 것이어서 거부되었다. Elasticsearch는 노드가 OutOfMemoryError로 크래시되지 않도록 요청을 사전에 중단한다. [parent] breaker는 전체 메모리 사용량을, [fielddata] breaker는 text 필드의 fielddata 메모리를 보호한다.
원인
부족한 JVM heap, 매우 크거나 복잡한 aggregation, 큰 결과 세트, 큰 bulk 요청, text 필드에 로드된 fielddata, 또는 heap을 채우는 많은 무거운 동시 쿼리. 대개 heap 압박의 증상이다.
해결 방법
쿼리를 줄인다: aggregation 크기, bulk 배치 크기, 반환 필드를 줄인다. text 필드의 fielddata 대신 keyword 하위 필드(.keyword)로 집계한다. JVM heap을 늘린다(서버 RAM의 약 50%, 최대 약 31GB). heap 압박을 모니터링한다: GET _cat/nodes?v&h=name,heap.percent. breaker 한도를 일시적으로 올리기보다 근본 원인(메모리/쿼리)을 해결한다. GET _nodes/stats/breaker로 어떤 breaker가 동작했는지 확인한다.
같은 데이터베이스의 다른 항목
- cluster_block_exceptionClusterBlockException[blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block]] (7.x 이전: FORBIDDEN/12/index read-only / allow delete (api))
- index_read_only_allow_deleteTOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block (legacy: FORBIDDEN/12/index read-only / allow delete (api))
- high_disk_watermark_exceededhigh disk watermark [90%] exceeded / flood stage disk watermark [95%] exceeded
- mapper_parsing_exceptionmapper_parsing_exception: failed to parse field [...] of type [...]
- strict_dynamic_mapping_exceptionstrict_dynamic_mapping_exception: mapping set to strict, dynamic introduction of [...] within [...] is not allowed
- illegal_argument_exception_fielddataillegal_argument_exception: Fielddata is disabled on text fields by default. Set fielddata=true on [your_field] in order to load fielddata in memory
- search_phase_execution_exceptionsearch_phase_execution_exception: all shards failed / Failed to execute phase [query]