DBAtlas · データベース運用アトラス

circuit_breaking_exception: CircuitBreakingException[[parent] Data too large, data for [<...>] would be [...], which is larger than the limit of [...]](データが大きすぎる (サーキットブレーカー))

Elasticsearch

意味

要求がメモリ (ヒープ) のサーキットブレーカーの上限を超えるため拒否された。Elasticsearch は、ノードが OutOfMemoryError でクラッシュするのを防ぐため、要求を事前に停止する。[parent] ブレーカーはメモリ使用量全体を、[fielddata] ブレーカーは text フィールドの fielddata メモリを保護する。

原因

JVM ヒープの不足、非常に大きい/複雑な集計、大きな結果セット、大きな bulk 要求、text フィールドにロードされた fielddata、またはヒープを圧迫する多数の重い同時クエリ。通常はヒープ圧迫の症状である。

対処方法

クエリを小さくする: 集計サイズ、bulk のバッチサイズ、返すフィールドを減らす。text フィールドの fielddata ではなく keyword サブフィールド (.keyword) で集計する。JVM ヒープを増やす (サーバー RAM の約 50%、最大約 31GB)。ヒープ圧迫を監視する: GET _cat/nodes?v&h=name,heap.percent。ブレーカーの上限を一時的に引き上げるのではなく、根本原因 (メモリ/クエリ) を解消する。どのブレーカーが作動したかは GET _nodes/stats/breaker で確認する。

DBAtlas で開く →

同じデータベースの他の項目