【分析】segments的version_map_memory指标具体表示什么?

简介: ES有很多的监控指标,其中有一些指标官方解释的实在模糊。比如version_map_memory:(byte units) Total amount of memory used by all version maps across all shards assigned to selected nodes.

官方解释

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-stats.html

image.png

社区

https://elasticsearch.cn/question/12541

我在社区里面提了该问题,有社区同学解释这个指标主要是 写入/更新时候的版本 在内存中的记录;

image.png

由于仍然存在一些疑惑,重新梳理一下update流程;

ES update流程

image.png

1.shard收到Update请求后,从Segment或者TransLog中读取同id的完整Doc,记录版本号为V1。
2.将版本V1的全量Doc和请求中的部分字段Doc合并为一个完整的Doc,同时更新内存中的VersionMap(将doc:V1 更新到versionMap)。获取到完整Doc后,Update请求就变成了Index请求。
3.加锁。
4.检查时从versionMap中读取该id的最大版本号V2(如果versionMap中没有,则从Segment或者TransLog中读取,这里基本都会从versionMap中获取到)。
5.检查版本是否冲突(V1==V2),如果冲突说明有其他update请求已经更新过versionMap了,则回退到开始的“Update doc”阶段,重新执行(或者直接失败,取决于client请求是否设置了重试,默认重试0次)。如果不冲突,则执行最新的Add请求。
6.在Index Doc阶段,首先将Version + 1得到V3,再将Doc加入到Lucene中去,Lucene中会先删同id下的已存在doc id,然后再增加新Doc。写入Lucene成功后,将当前V3更新到versionMap中。
7.释放锁。

ES写入流程图

该图来源于参考1:
image.png

最后

可以看到,versionMap是在内存中用来存放doc版本信息的。
系统的写入流程对版本依赖较重,读取频率较高,因此采用了versionMap,减少热点数据的多次磁盘IO开销。

参考1:https://www.cnblogs.com/candlia/p/11920036.html
参考2: https://elasticsearch.cn/question/12541

相关文章
|
4天前
Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
【4月更文挑战第12天】Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
22 3
|
4天前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之出现报错 "ERROR: Total memory used by all existing queries exceeded memory limitation."如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 2
|
7月前
|
缓存 Java Spring
【缓存】At least one non empty cache name should be provided per cache operation.的解决方案
【缓存】At least one non empty cache name should be provided per cache operation.的解决方案
50 0
|
存储 缓存 大数据
Starrocks执行查询报错:Memory of process exceed limit. Used: XXX, Limit: XXX. Mem usage has exceed the limit of BE
Starrocks执行查询报错:Memory of process exceed limit. Used: XXX, Limit: XXX. Mem usage has exceed the limit of BE
|
缓存 数据可视化
'dict' object has no attribute '_txn_read_preference' && Sort exceeded memory limit of 10485760
'dict' object has no attribute '_txn_read_preference' && Sort exceeded memory limit of 10485760
157 0