我按照wiki Limiting Memory Usage调整ElasticSearch集群的fielddata缓存。我发现fielddata断路器(indices.breaker.fielddata.limit)没有像维基中所解释的那样工作。我期待它阻止超过限制的查询,但它似乎控制了总fielddata缓存的数量。
系统规范:
实验:
curl -XPOST 'http://localhost:9200/_cache/clear?fielddata=true'
curl -XGET 'localhost:9200/_cat/fielddata?v&pretty'
为什么即使查询未超过断路器中指定的200 MB限制,步骤5中的查询也会被阻止?似乎断路器限制了集群可以加载到fielddata的数据量?是不是由 indices.fielddata.cache.size 控制?
除了有两个部分我在维基中发现令人困惑:
如果估计的查询大小大于限制,则断路器将被触发,查询将被中止并返回异常。 这在加载数据之前发生,这意味着您不会遇到OutOfMemoryException。
显然,它为字段B加载了一些数据,或者我读错了吗?
但是,使用默认设置,旧索引中的fielddata永远不会被驱逐! fielddata将继续增长,直到您使用fielddata断路器(参见断路器),这将阻止您加载任何更多的fielddata。
等等,断路器是否应该限制查询?它也限制了总尺寸?
如果我错了,请纠正我。谢谢!