作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


偶然发现vm-storage的监控里有这样一个指标:vm_slow_row_inserts_total,能够体现慢插入的次数。

由此做了一个慢插入的报表:

  • 分子:sum by () (rate(vm_slow_row_inserts_total{tenant=~"$tenant",namespace=~"$namespace",env_name=~"$env_name",pod_name=~"${cluster}.+"}))
  • 分母:sum by () (rate(vm_new_timeseries_created_total{tenant=~"$tenant",namespace=~"$namespace",env_name=~"$env_name",pod_name=~"${cluster}.+"}))

vm_slow_row_inserts_total是怎么产生的呢?我梳理了一下流程。

主要是这一行:

// VictoriaMetrics-1.72.0-cluster/lib/storage/storage.go:1800
func (s *Storage) add(){
if s.getTSIDFromCache(&r.TSID, mr.MetricNameRaw) { // 如果是已经存在的TSID
// fast path
}
// slow path
// 在这个分支下插入的ts都会记录到 vm_slow_row_inserts_total
}

再看s.getTSIDFromCache()函数,其实就是从 s.tsidCache 这个缓存对象中查询。

tsidCache的key是整个序列化后的 metric, value是tsid。

  • 全新的metric必然不在这个cache,因此单位时间的vm_slow_row_inserts_total必然大于等于每分钟新增的time series(也就是vm_new_timeseries_created_total这个指标体现的内容)
  • 如果旧的metric不在cache里,就只能通过LSM Tree去查询,必然是慢的。

问题来了,为什么旧的metric不在tsidCache里?

看看tsidCache的初始化,老的版本是可用内存的35%,新的版本中可以通过参数配置。

storage.cacheSizeStorageTSID参数可以配置这个cache的大小。

如果time series的总数太多,占满了这个cache,必然导致cache miss.

最后的结论是:

1.如果流失率不高,可以调高这个cache的大小,这样就能减少vm_slow_row_inserts_total的数量

2.如果流失率高,调高这个cache意义不大。我觉得可以把-retentionPeriod的时间改短,短到这个周期内的大多数time sereis都能被cache住。

如何减缓vm中慢插入的次数的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(10-9)译 -> 在多对多关系中为插入和删除使用存储过程

    10-9. 在多对多关系中为插入和删除使用存储过程 问题 想要在一个无载荷的多对多关系中使用存储过程(存储过程只影响关系的连接表) 解决方案 假设有一个多对多关系的作者( Author)表和书籍( B ...

  2. 整数中1出现的次数(从1到n整数中1出现的次数)

    题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  3. (原创)VM中的CentOS6.4中安装CloudStack6.3②

    接着VM中的CentOS6.4中安装CloudStack6.3①中文章接着,往下面安装 4.更新 yum 仓库 默认情况下,CentOS的软件源中没有收录最新版本CloudStack,为了能顺利安装, ...

  4. 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)

    问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次. 思路:(不考虑时间效率的解法,肯定不 ...

  5. vm中centos7配置静态ip访问外网

    我使用的是桥接方式,具体步骤如下   1.设置虚拟机网络: 编辑>虚拟网络编辑器   2.设置vm中操作系统的网络设置   3.进入centos7中后修改网络配置:     另附我的宿主机网络配 ...

  6. 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目1373:整数中1出现的次数(从1到n整数中1出现的次数) 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他 ...

  7. 剑指Offer 整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  8. 【编程题目】在从 1 到 n 的正数中 1 出现的次数

    30.在从 1 到 n 的正数中 1 出现的次数(数组)题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数.例如输入 12,从 1 到 12 这些整数中包含 1 的 ...

  9. 25.在从1到n的正数中1出现的次数[NumberOf1Between1_N]

    [题目] 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. [分析] 这是一道广为流传的goo ...

  10. 161102、MyBatis中批量插入

    方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...

随机推荐

  1. HanLP — HMM隐马尔可夫模型 -- 预测

    https://www.bilibili.com/video/BV1aP4y147gA?p=8

  2. 浅谈sql执行流程、innodb架构设计、buffer pool缓冲池

    一.从服务端到数据库sql执行流程: 1.SQL接口:负责处理接收到sql的语句 2.查询解析器:负责将sql变成数据库可以看懂的语言 3.查询优化器:选择最优的查询路径(针对你编写的复杂sql语句生 ...

  3. 记一次go应用在k8s pod已用内存告警不准确分析

    版权说明: 本文章版权归本人及博客园共同所有,转载请在文章前标明原文出处( https://www.cnblogs.com/mikevictor07/p/17968696.html ),以下内容为个人 ...

  4. Android 编译线程爆了, gradle 内存 OOM 解决之路

    本文首发我的微信公众号徐公,收录于 Github·AndroidGuide,这里有 Android 进阶成长知识体系, 希望我们能够一起学习进步,关注公众号徐公,5 年中大厂程序员,一起建立核心竞争力 ...

  5. 浅谈splice( )与slice( )

    1.splice( ) 概念:splice( )用于修改原始数组,它可以删除.插入.替换数组的元素,并返回被删除的元素组成的新数组. 语法:splice(start,deleteCount,item1 ...

  6. 解决延迟有 Wi-Fi 6 就够了!

    最近二狗子家里的路由器坏了,而家里的数据网络信号又非常差,失去了路由器基本上就等于和世界隔离,所以二狗子打算去附近商城随便买一个新的路由器,结果售货员张口就问:"买 Wi-Fi 6 的路由器 ...

  7. C++ 20 标准协程入门教程

    基本概念 (是什么) 协程(coroutine): 是一种特殊的函数,其可以被暂停(suspend), 恢复执行(resume).一个协程可 以被多次调用. 协程(coroutine): 分为stac ...

  8. Codeforces Round #723 (Div. 2) (A~C题题解)

    补题链接:Here 1526A. Mean Inequality 给定 \(2 * n\) 个整数序列 \(a\),请按下列两个条件输出序列 \(b\) 序列是 \(a\) 序列的重排序 \(b_i ...

  9. JSONObject--- JSON---与bean对象的转换

    1.对象PO转json-string:  String json = JSON.toJSONString(customerBueventAccountPO); 1.可能用到的jar宝: json-li ...

  10. BOM概述