
Prometheus 的内存占用主要来自两个方面(1) 索引块Index全量 mmap 到内存(2) 数据块Chunks按时间窗口预加载。而 VictoriaMetrics 通过 TSIDCache 只缓存热点索引通过 blockCache 只缓存热点数据块显著降低了内存占用。对比维度Prometheus TSDBVictoriaMetrics MergeSet索引存储Index 段文件全量 mmap倒排索引 TSIDCache 热缓存数据存储Chunks 按时间窗口预加载Parts 按需加载到 blockCache内存策略内存优先尽量放内存分层缓存热数据在内存磁盘空间标准压缩commonPrefix NearestDelta ZSTD我理解源码的意思是说两种内存策略可以类比为图书馆管理——一个是桌面堆书模式一个是图书馆借阅系统模式。Prometheus 把整本书放在桌上想象你在图书馆的自习室你的桌子上堆满了书——不是一本一本看而是把可能用到的书全部摆在桌上。问题是桌子空间有限书越来越多桌子就满了。一本书一个 time series要么全在内存桌上要么不在书架上。这种模式的优点是翻书快缺点是桌子要很大。VictoriaMetrics 图书馆借阅系统想象你有一个智能图书馆系统。桌子上只放当前正在看的书热点数据和目录卡片抽屉TSIDCache。想看哪本书先查目录卡片metricName → TSID然后去书架上拿从磁盘读取。看完放回书架桌子保持整洁。书架磁盘可以很大但桌子内存不需要那么大。blockCache 三层的理解ibCache25% 桌面上放着的当前在看的书——数据块内容频繁访问idxbCache10% 桌上另一角放着的书的目录页——索引块内容查询时必读ibSparseCache5% 桌上的便签纸——ibCache 的稀疏访问优化存放不常用但偶尔要翻的页为什么 VM 更省内存Prometheus 的内存策略是尽量把书放桌上——索引全量 mmap把所有书名都记在脑子里数据块按时间窗口预加载提前把可能看的书都摆出来。结果是内存大 能放更多书内存小 频繁换书page fault。VictoriaMetrics 的内存策略是按需借书——只把热点数据放桌上TSIDCache blockCache冷数据在书架上磁盘。结果是内存小也能工作只是偶尔要去书架拿书磁盘 I/O。这就是省 7x RAM的本质——不是压缩数据而是减少常驻内存的数据量。必记闭环逻辑核心考点VictoriaMetrics 省 7x RAM 来自三大设计的协同(1) MergeSet LSM-less 只合并不分层减少遍历开销(2) TSIDCache 37% 策略优先缓存 metricName → TSID 映射(3) blockCache 三层ibCache 25% idxbCache 10% ibSparseCache 5%按需缓存数据块。五、典型应用场景谁在使用 VictoriaMetrics思考记忆提示— 本节帮助你理解 VM 的适用场景避免锤子思维——把所有问题都当作钉子VM 适合大规模长期监控、多租户环境、Grafana 集成VM 不适合超低延迟交易系统、需要强事务的场景面试高频提问什么场景适合用 VictoriaMetrics它和 InfluxDB/Thanos 怎么选VictoriaMetrics 已经在生产环境中被多家知名公司使用。以下是典型的应用场景5.1 适用场景大规模 Prometheus 长期存储当 Prometheus 的本地存储无法满足长期数据保留需求时VM 作为 remote_write 后端提供无限存储。高 Cardinality 环境如 Kubernetes 监控、Service Mesh 可观测性标签值众多导致 Prometheus OOMVM 通过 BloomFilter 动态调整基数限制。多租户监控平台通过 accountID/projectID 实现资源隔离适合 SaaS 或内部监控平台。Grafana 集成原生支持 Prometheus 数据源Grafana 用户零成本迁移。5.2 知名用户案例公司使用规模使用场景字节跳动数十亿 series抖音/头条基础设施监控阿里巴巴数亿 series电商平台核心系统监控腾讯数百万 series微信/游戏基础设施监控小米大规模IoT 设备时序数据监控小贴士如果你正在使用 Prometheus Thanos/Mimir并且遇到了扩展性或成本问题VictoriaMetrics 是一个值得评估的替代方案。VM 的存储效率通常比 Thanos Prometheus 高 5-10 倍。必记闭环逻辑核心考点VictoriaMetrics 的最佳场景是大规模 Prometheus 长期存储 100 万 series、高 Cardinality 环境和多租户监控平台。它不适合需要强事务或超低延迟的交易系统。字节跳动、阿里巴巴、腾讯、小米 等公司已在生产环境验证了 VM 的能力。六、学习路线图如何高效阅读这个专题思考记忆提示— 本节提供学习路径建议帮助你高效利用这个专题建议从A 架构设计篇#01-#15开始建立全局认知按需深入C 存储引擎篇#41-#55理解性能基础面试高频提问如何快速理解 VictoriaMetrics如何阅读它的源码250 篇源码专题内容很多如何高效学习以下是推荐的学习路径6.1 第一阶段建立全局认知#01-#15约 1 周这一阶段的目标是理解 VictoriaMetrics 是什么、整体架构是怎样的、为什么能省 7x RAM。重点文章#01 设计哲学理解 VM 的核心优势来源#02 全局架构Single-Node vs Cluster 模式#04 整体数据流数据从写入到存储的全链路#05 版本演进了解 1.146.0 LTS 的重大变化#09 性能模型理解性能常数的来源6.2 第二阶段深入核心原理#41-#70约 2 周这一阶段的目标是理解 MergeSet 存储引擎和查询引擎的内部原理。重点文章#41 MergeSet vs LSM Tree理解 VM 的核心存储设计#47 commonPrefix 压缩存储空间减少 30-50% 的原理#51 6 种压缩算法NearestDelta 是核心#56 PromQL 执行引擎查询如何执行#64 并发控制concurrencyLimitCh 令牌桶6.3 第三阶段进阶专题与运维实践#116-#145约 2 周这一阶段的目标是具备生产环境的故障诊断和运维能力。重点文章#117 bytesutil 零拷贝unsafe.Pointer 高性能编程#122 persistentqueue磁盘可靠消息队列#127 histogram_quantileP99 分位数计算原理#104 Cardinality 爆炸最常见的 OOM 原因#107 内存调优memory.Allowed() 计算#131 从 Prometheus 迁移vmctl 使用#135 容量规划硬件选型参考6.4 第四阶段源码追踪#161-#175约 2 周这一阶段的目标是具备独立阅读和理解源码的能力。重点文章#161 HTTP 到 Part 文件完整写入链路追踪#162 PromQL 到结果完整查询链路追踪#163 Part 四文件结构二进制格式详解#165 indexDB 8 种索引前缀Tag 查询完整路径#170 TSIDCache 37% 计算内存分配逻辑我理解源码的意思是说学习 VictoriaMetrics 就像学习一门武功——有内功、有招式、有实战、有闭关修炼。四个阶段层层递进不可跳级。第一阶段#01-#15 看武功秘籍的总纲 概述。这套武功叫什么名字VictoriaMetrics、能做什么高性能时序数据库、核心原理是什么MergeSet 存储引擎。目标建立全局认知知道 VM 的轮廓不要纠结细节。读完这个阶段你应该在纸上能画出 VM 的三层架构图vminsert/vmstorage/vmselect。第二阶段#41-#70 修炼内功心法 基本招式。内功心法是存储引擎MergeSet 原理、LSM-less 设计、压缩算法——告诉你 VM 为什么能省 7x RAM基本招式是查询引擎PromQL 执行、并行归并——告诉你查询是怎么执行的。目标理解性能基础能回答为什么 VM 这么快。这个阶段需要配合源码阅读边看边调试。第三阶段#116-#145 修炼进阶招式 下山历练。进阶招式是bytesutil/persistentqueue/histogram_quantile——深入理解核心库的原理下山历练是排障调优 运维实践——学会在实际环境中部署、监控、故障诊断。目标具备生产环境的实战能力能解决实际问题。这个阶段需要动手操作搭建测试环境模拟故障场景。第四阶段#161-#175回山闭关亲手推导武功秘籍。完整追踪一条数据的旅程从 HTTP 入口到 Part 文件从 PromQL 解析到结果返回。目标具备独立阅读和理解源码的能力。前面三个阶段是看别人写的秘籍这个阶段是自己推导秘籍的原理。避坑提醒不要跳阶段武功要一层层练心急吃不了热豆腐。没有全局认知直接看源码会迷失没有实战经验直接追踪源码会缺乏上下文。每个阶段都要配合动手。只看不动手 纸上谈兵。建议每篇都 clone 源码边看边调试。遇到不懂的名词不要慌。先记下来继续往下看。有时候后面的内容会帮你理解前面的概念。附录是工具书不是必读内容。遇到问题时再查不需要提前背下来。学习时间参考快速入门#01-#15约 1 周每天 1-2 小时深度理解#41-#70约 2 周每天 2-3 小时实战进阶#101-#145约 2 周每天 2-3 小时 动手实践源码追踪#161-#175约 2 周每天 3-4 小时 阅读源码必记闭环逻辑核心考点高效学习路径先用 A 架构设计篇建立全局认知#01-#15再用 C 存储引擎篇 D 查询引擎篇理解性能基础#41-#70接着通过 H 进阶专题#116-#130和 G/I 排障调优和运维实践培养实战能力#101-#145最后用 K 源码追踪深入理解内部原理#161-#175。