1.vm-storage源码调用表

文件 行号 函数 说明
app/vmstorage/main.go 53 main 入口
94行调用srv.RunVMSelect()
app/vmstorage/transport/server.go 151 func (s *Server) RunVMSelect() 启动vm-select的服务器端
208行调用s.processVMSelectConn(bc)
app/vmstorage/transport/server.go 269 func (s *Server) processVMSelectConn 275行调用s.processVMSelectRequest(ctx)
app/vmstorage/transport/server.go 467 func (s *Server) processVMSelectRequest 处理存储相关的各个命令
498行调用s.processVMSelectSearch(ctx)
app/vmstorage/transport/server.go 1037 func (s *Server) processVMSelectSearch 从存储引擎读取数据

2.vm单机版的源码

文件 行号 函数 说明
app/victoria-metrics/main.go 33 main 入口
app/victoria-metrics/main.go 84 requestHandler http处理函数
108行调用vmselect.RequestHandler
app/vmselect/main.go 87 RequestHandler 查询请求入口
220行调用prometheus.QueryRangeHandler
app/vmselect/prometheus/prometheus.go 1088 QueryRangeHandler /api/v1/query_range 入口
1112行调用queryRangeHandler
app/vmselect/prometheus/prometheus.go 1118 queryRangeHandler queryRangeHandler
1151行调用promql.Exec
app/vmselect/promql/exec.go 29 Exec 执行查询
43行调用evalExpr
app/vmselect/promql/eval.go 186 evalExpr 191行调用evalRollupFunc
app/vmselect/promql/eval.go 482 evalRollupFunc 509行调用evalRollupFuncWithMetricExpr
app/vmselect/promql/eval.go 646 evalRollupFuncWithMetricExpr 684行调用netstorage.ProcessSearchQuery
截止这个函数,VM单机版和群集版的vm-select几乎是一致的。
app/vmselect/netstorage/netstorage.go 1009 ProcessSearchQuery 执行ql查询语言。从存储引擎读取数据

3.结论

  • 证实了我的猜想:

    • vm单机版和vm集群版,在查询上,本质的不同就是进程内处理数据和进程间处理数据的差别。
    • vm单机版中,解析完promql后,直接通过存储引擎的接口拉取数据,然后进行计算。(逻辑上并未看见因为存储引擎就在本机而做的特殊优化)
    • VM群集版中:
      • vm-select负责解析promql,然后转换成range_query的参数
      • vm-select通过网络协议请求vm-storage
      • vm-storage查询到time series和data point后,返回给vm-select(数据极度精简,且经过ZTD算法压缩)
      • vm-select从多个vm-storage收到数据后,进行去重、计算、输出JSON
  • vm单机版从理论上比vm群集版节约了这些步骤:
    • vm-select到vm-storage的网络通讯可以省掉
    • vm-storage向vm-select返回数据的ZSTD压缩可以省掉
    • 不必访问多个vm-storage,因此vm-select的响应时间等于最慢的那个vm-storage。单机版中没有这个等待。
    • 数据量很大的情况下,上述的节省也是非常可观的。
  • 我认为vm单机版的优化还是不够:
    • 如果存储节点在本地,起码可以做边捞取数据边汇总,这样查询时候的内存占用就会减小很多。(但这样也不会节约计算时间)
    • 最好增加recording rules的能力,通过预计算提升查询性能

【VictoriaMetrics】vm单机版和vm-storage的查询功能的对比的更多相关文章

  1. Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio”

      Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio” 作者:尹正杰 版权声明:原创作品,谢绝转载 ...

  2. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  3. 通过维基API实现维基百科查询功能

    通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...

  4. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  5. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  6. MySQL 5.5开启慢查询功能

    vim /etc/my.cnf [mysqld] slow-query-log = on # 开启慢查询功能 slow_query_log_file = /usr/local/mysql/data/s ...

  7. php+mysql预查询prepare 与普通查询的性能对比

    prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...

  8. ASP.NET MVC系列:为视图添加查询功能

    首先,在MoviesController里添加一个查询方法,代码如下 public ActionResult SearchIndex(string title) { //查询数据库中的电影表 var ...

  9. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

随机推荐

  1. SP1798 ASSIST - Assistance Required 题解

    Content 有一个足够长的数列 \(a\),是一个首项为 \(2\),公差为 \(1\) 的等差递增数列.另有一个初始为空的数列 \(b\). 重复进行如下操作: 假设当前数列 \(a\) 第一项 ...

  2. CF450B Jzzhu and Sequences 题解

    Content 有一个长度为 \(n\) 的数列 \(\{a_1,a_2,\dots,a_n\}\),满足如下的递推公式: \(i=1\) 时,\(a_1=x\). \(i=2\) 时,\(a_2=y ...

  3. href超级链接里加上javascript代码的,还有target问题

    href超级链接里加上javascript代码的,还有target问题 得把target="_blank"去掉才好用,在google浏览器有这个也没事,但是在Ie里有这个就不行了

  4. AcWing1341. 十三号星期五

    题目: 十三号星期五真的很不常见吗? 每个月的十三号是星期五的频率是否比一周中的其他几天低? 请编写一个程序,计算 N 年内每个月的 13 号是星期日,星期一,星期二,星期三,星期四,星期五和星期六的 ...

  5. [COCI2018-2019#2] Sunčanje 题解

    link 考虑简洁的 \(\text{cdq}\) 做法. 约定:第 \(i\) 个矩形左下角为 \((xl_i,yl_i)\),右上角为 \((xr_i,yr_i)\),所有坐标都已离散化. 如果 ...

  6. JAVAWeb项目实现在线预览、打开office文件

    Web项目实现在线预览浏览word.ppt.excel文档方法 调用以下链接 https://view.officeapps.live.com/op/view.aspx?src=你的文档绝对路径 这里 ...

  7. windows系统中远程登录ubuntu18服务器的桌面

    下载:http://www.c-nergy.be/products.html 也可以直接服务器里 wget https://www.c-nergy.be/downloads/xRDP/xrdp-ins ...

  8. 使用unc0ver(5.3.1)执行jailbreak踩坑

    官方网站: https://unc0ver.dev/ 目前版本: 5.3.1 使用mac os+altstore步骤: AltStore Download AltStore. Use the link ...

  9. 【剑指Offer】矩阵覆盖 解题报告(Python)

    [剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  10. 【LeetCode】150. Evaluate Reverse Polish Notation 解题报告(Python)

    [LeetCode]150. Evaluate Reverse Polish Notation 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/ ...