字段 Doc_Values 以减少内存使用
Fields as Doc_Values to drop Memory Usage
目前我们面临很多这样的异常:
ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [field1] would be larger than limit of [24108466176/22.4gb]]
在对上述异常进行一些调查后,field1
似乎占用了很多 fielddata cache size
以及我们称之为 field2
的另一个字段
GET /_stats/fielddata?fields=field1,field2
的结果:
"total": {
"fielddata": {
"memory_size_in_bytes": 260456614595,
"evictions": 1226307,
"fields": {
"field1": {
"memory_size_in_bytes": 76629429704
},
"field2": {
"memory_size_in_bytes": 97600838429
}
}
}
}
注意:两个字段都是not_analyzed
。 Field1 在搜索查询中被大量使用,而 field2 则没有那么多。
因此,根据 es 文档的 doc value 部分,这些字段可以存储为 doc values
以减少堆使用。
这是解决上述异常等内存问题的好方法吗?
文档还说通过将字段存储为doc值,索引会变大,有没有办法计算这个增加?
Doc_Values
太棒了!
对于新索引,这些字段的 fielddata size
为 0:
"total": {
"fielddata": {
"memory_size_in_bytes": 5394813851,
"evictions": 112,
"fields": {
"field1": {
"memory_size_in_bytes": 0
}
}
}
}
在这些字段上执行查询时不再出现 Data too large
异常,更不用说这些查询现在执行得更快了,我猜是因为 CircuitBreaker
不会经常出错.
为了性能...索引略有下降,不用担心。
- 在我们的例子中,索引大小现在大约增加了 20%。
目前我们面临很多这样的异常:
ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [field1] would be larger than limit of [24108466176/22.4gb]]
在对上述异常进行一些调查后,field1
似乎占用了很多 fielddata cache size
以及我们称之为 field2
GET /_stats/fielddata?fields=field1,field2
的结果:
"total": {
"fielddata": {
"memory_size_in_bytes": 260456614595,
"evictions": 1226307,
"fields": {
"field1": {
"memory_size_in_bytes": 76629429704
},
"field2": {
"memory_size_in_bytes": 97600838429
}
}
}
}
注意:两个字段都是not_analyzed
。 Field1 在搜索查询中被大量使用,而 field2 则没有那么多。
因此,根据 es 文档的 doc value 部分,这些字段可以存储为 doc values
以减少堆使用。
这是解决上述异常等内存问题的好方法吗?
文档还说通过将字段存储为doc值,索引会变大,有没有办法计算这个增加?
Doc_Values
太棒了!
对于新索引,这些字段的
fielddata size
为 0:"total": { "fielddata": { "memory_size_in_bytes": 5394813851, "evictions": 112, "fields": { "field1": { "memory_size_in_bytes": 0 } } } }
在这些字段上执行查询时不再出现
Data too large
异常,更不用说这些查询现在执行得更快了,我猜是因为CircuitBreaker
不会经常出错.为了性能...索引略有下降,不用担心。
- 在我们的例子中,索引大小现在大约增加了 20%。