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


vm-storage中,写入索引的性能要比写入data point慢很多。

通常,每条time series的数据,索引的数量是label总数的4~6倍。例如,一条time series有10个label,则至少会创建40个索引。

假设发送给vm-storage的数据全都是全新的metric,vm-storage的极限写入性能到底在什么范围呢?以下是我的测试。

1.基础信息

  • CPU 1核
  • 内存 8GB
  • 本地磁盘(应该是SATA盘)
  • metric的平均长度:700字节
  • vm-storage版本:v1.78.0-cluster
  • 压测方法:使用remote write协议写入完全不同的metric数据,每次发送1000条,每核50个并发,一共5核。
    • vm-insert 2 实例,共8核,资源充足
    • vm-insert的关键参数如下:
      • -maxConcurrentInserts=默认值:默认每个核四个并发。这个配置很合理,建议不要修改。
      • -sortLabels: 开启label的排序。推荐开启。
      • -insert.maxQueueDuration=3s: 当写入数据太多导致繁忙后,请求最多在队列里面等待3秒。超过3秒还没有资源处理,就会向后端返回503错误。这个时间建议略小于remote write客户端的请求超时时间。
      • -dropSamplesOnOverload: 非常重要,为了保护vm-insert自身,在vm-storage变慢后,立即丢弃数据,避免vm-insert自身的内存爆掉而产生雪崩。

2.vm-storage性能表现

  • CPU占用:0.87核~0.93核 (相当于CPU资源已经到瓶颈了)
  • 内存:6.33GB, 占79%
  • 网络入流量:160kb ~ 200kb
  • 磁盘读:6.91MB,最高延迟 25ms
  • 磁盘写:8.14MB,最高延迟 43ms
  • 新的metric的占比 100%, slow insert的占比100%(显而易见) , tsid cache的miss率 100%(显而易见)
  • 每秒写入的新metric数量:5998/s
  • 新metric与索引数量的倍数关系:29.4 (平均每条metric创建将近30条索引)
  • tsid cache占用百分比:98.7%
    • 由此可见:新的metric会写入tsid cache,以便于下次插入相同metric的时候能够提速。如果存在大量昙花一现的metric,必然导致tsid 的 cache miss升高,进而导致slow insert增多。
  • vm-insert端:
    • 请求量:11.1万/s
    • 丢弃量:10.8万/s

3.总结

  • 当所有的time series都是全新的情况下, vm-storage的的单核的极限写入性能大约是:6000/s
  • 当全是新metric时:磁盘读是写入流量的 35.4 倍, 磁盘写是写入流量的 41.7 倍
  • 当写入量过大时,CPU是瓶颈,其次是内存。网络流量和磁盘IO的资源占用相对较小。
  • 当vm-storage过载时,表现为写入减少,写入延迟升高:
    • 从而,vm-insert的写入协程进入阻塞;
    • 当设置了vm-insert的-dropSamplesOnOverload参数时,vm-insert会把无法发送给vm-storage的数据立即丢弃
    • 当remote write的请求,在vm-insert上的阻塞时间达到了-insert.maxQueueDuration的时间后,vm-insert会返回http 503错误。
    • 因此:remote write客户端收到503错误后,要减小发送频率;而非503错误要重试一定次数。
    • vm-insert上如果发现vm_rpc_rows_dropped_on_overload_total的数据,则说明vm-storage开始过载,需要扩容;
    • 如果vm-storage的过载是因为短期的新metric太多,应该等一会儿,等到tsid cache的命中率提升后恢复正常写入;

vm-storage在全部都是新metric情况下的写入性能测试的更多相关文章

  1. Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。

    今天遇到的一个大坑,话不多少,看sql和下边的查询结果: --问题:恰好把buildingid is null的记录给过滤掉 ),buildingid ),)); ); ); ); ); ); ); ...

  2. base 使网页所有超链接都以新超链接的方式打开

    需求,网页有许多超链接,但是没有加 target="_blank",现在需要所有超链接都已新页面的方式打开 在head头添加 <base target="_blan ...

  3. 代码方式设置WordPress内所有URL链接都在新标签页打开

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=699 前言: WordPress默认情况下几乎所有URL链接都是在同一个标签页打开.这样的话,读者点击一个链接就会离 ...

  4. webpack用了manifest为何还是每次都生成新的vendor?

    原来的代码 //用于提取公共代码 new webpack.optimize.CommonsChunkPlugin({ //记得要在开头引入webpack names: ['vendor','manif ...

  5. CentOS系统在不重启的情况下为虚拟机添加新硬盘

    一.概述 用过虚拟机的都知道,如果在系统运行的时候去给虚拟机添加一块新设备,比如说硬盘,系统是读取不到这个新硬盘的,因为系统在启动的时候会去检测硬件设备.但是我们也可能会遇到这样的情况,比如正在运行比 ...

  6. 在不连接网线的情况下Windos与VM之间如何ping通

    一般情况下,如果宿主主机的网口连接网线并且能够上网,那么按照VM的默认安装,在VM-Settings-Hardware-Network Adapter-Network connection中选择Bri ...

  7. 03-移动端开发教程-CSS3新特性(下)

    1. CSS3动画 1.1 过渡的缺点 transition的优点在于简单易用,但是它有几个很大的局限. transition需要事件触发,所以没法在网页加载时自动发生. transition是一次性 ...

  8. 关于RecyclerView你知道的不知道的都在这了(下)

    目录 目录 正文 6. Recycler 7. ItemAnimator 8. ItemDecoration 9. OnFlingListener 目录 由于本篇篇幅特长,特意做了个目录,让大伙对本篇 ...

  9. 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(上) 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(下)

    微信.QQ.新浪微博等第三方登录,你想知道的都在这了(上):https://www.jianshu.com/p/133d84042483 微信.QQ.新浪微博等第三方登录,你想知道的都在这了(下):h ...

  10. 萌新笔记——linux下查看内存的使用情况

    windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...

随机推荐

  1. 获取全国GeoJSON和各省市GeoJSON数据下载

    第一,从阿里云下载: http://datav.aliyun.com/tools/atlas/#&lat=33.50475906922609&lng=104.2822265625&am ...

  2. 多领域应用落地,火山引擎ByteHouse加速云数仓升级

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近日,火山引擎数智平台VeDI直播活动「超话数据」在线举办,来自火山引擎的产品及解决方案专家分享了以ByteH ...

  3. 火山引擎智能外呼联合火山引擎VeDI升级服务,让企业精准营销不再难

    企业营销模式正在经历一场巨变.数字化营销早已替代传统的营销方式,成为企业营销的主流方式和发展战略中不可或缺的部分.然而随着数字化营销的普及,市场迈入存量竞争时代,获客成本也逐年攀升.面对营销过程中不断 ...

  4. django实现微信公众号扫码登录

    首先是去获取access_token,access_token接口有次数限制,所以保存到缓存,失效时再去调用接口 import base64 import json import time impor ...

  5. 接口文档 token原理 jwt介绍和原理 drf-jwt快速使用

    目录 昨日回顾 认证 权限 频率 全局异常处理 接口文档 接口文档编写 drf自动生成接口文档 cookies-session-token发展史 jwt介绍和原理 jwt的构成 base64的编码和解 ...

  6. Mysql--JOIN连表查询

    一.Join查询原理 MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法:通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表 ...

  7. .NET 6 整合 Autofac 依赖注入容器

    前言 一行业务代码还没写,框架代码一大堆,不利于学习. 常看到java的学习资料或博客,标题一般为<SpringBoot 整合 XXX>,所以仿照着写了<.NET 6 整合 Auto ...

  8. CMake 禁用 MSVC 编译警告 C4819

    warning C4819:该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失 if (win32) add_complie_options(/W4 ...

  9. 六、mycat全局自增

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 一 ...

  10. 【驱动】I2C驱动分析(一)-I2C驱协议简介

    什么是 I²C I²C 叫集成电路总线 它是一种串行通信接口,具有双向两线同步串行总线,通常由两根线组成--SDA(串行数据线)和SCL(串行时钟线)和上拉电阻. 它们用于需要许多不同部件(例如传感器 ...