【分析】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

相关文章
|
机器学习/深度学习 计算机视觉 数据可视化
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
7005 0
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
|
机器学习/深度学习 运维 搜索推荐
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明
在机器学习和深度学习用于异常检测(Anomaly detection)、电子商务(E-commerce)、信息检索(Information retrieval, IR)等领域任务(Task)中,有很多的指标来判断机器学习和深度学习效果的好坏。这些指标有相互权衡的,有相互背向的,所以往往需要根据实际的任务和场景来选择衡量指标。本篇博文对这些指标进行一个梳理。
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明
|
5月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
2月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
2月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
1月前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
42 0
|
3月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
3月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
3月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
3月前
|
存储