tidb之旅——资源管控

news2024/9/22 7:23:23

作者: 有猫万事足 原文来源: https://tidb.net/blog/26695303

前言

在我的设想里面,我应该不会这么早用到这个特性,原因很简单,整个TiDB集群根本不涉及多租户的使用场景。 应该说目前TiDB集群中的用户就2个:dmuser用户负责把上游mysql写入流量接入tidb集群;biuser只有只读权限配置到了metabase里面,给metabase查询用。 即便是我要用到这个特性,也应该是在有一天真的使用tidb集群替换上游的多套mysql之后。那个时候是个典型的多租户使用场景。 然而,首先让我对这个特性感兴趣的原因是RU。

RU

资源管控的基本单位是RU。 https://docs.pingcap.com/zh/tidb/stable/tidb-resource-control#%E4%BB%80%E4%B9%88%E6%98%AF-request-unit-ru

Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量单位,用于表示对数据库的单个请求消耗的资源量。请求消耗的 RU 数量取决于多种因素,例如操作类型或正在检索或修改的数据量。

如果让我说RU好在哪里,首先就好在RU是抽象的。

看看我这个4核8g乞丐版集群的监控吧。

接入上游mysql写入流量后,cpu一直不怎么高,除非执行大表的导入。但tikv的内存一直不低,tikv内存超80%的告警一直在。所以我干脆设置了一个长达1年的静默期忽略了它。io图的单位不是百分比,我看对应的数值很难评估当前io离极限有多远。

那问题来了,当老板问我,我准备上游再切10台同样mysql进TiDB集群,你的集群能抗的住吗?

我该怎么回答他呢?这3项指标有高有低,甚至有些本菜鸡都没有量化的标准。我敢说——行,放马过来;或者:不行,得加钱吗?

以上这个情况是我不能接受的。

经过抽象的RU却可以解决我的问题。我现在已经接入了10+套上游的mysql写入流量。

因为dmuser基本都是写入操作,我只要进入资源管控界面,看下预估的oltp_write_only RU是多少,再看看当前的RU是多少就可以回答老板的问题了。

对于我这种非专业人士,我不需要关注cpu,内存,io。这些太专业,太具体。也许有朝一日,我可以成为大佬靠这些指标来更加准确的评估集群的负载,但不是现在。

资源管控界面显示,预估oltp_write_only RU是3w6,当前是800.我可明确的告诉老板,再来10套绝对没有问题。

非专业人士使用预估oltp_write_only RU/oltp_read_only RU,再结合当前实际的RU消耗量,来评估集群的读写负载,可能是比cpu,内存,io这些更加直观的。

正是在这种对比下,我才确认当前的TiDB集群负载很低——即便某些节点内存占用高。

那下一个问题就是这个oltp_write_only RU的评估准确吗?

尝试通过负载校准

通过负载校准RU需要一定的负载。

想想我之前一导入大表,tikv就轮流挂的'盛况'。来点负载根本不是事,安排。

于是在我执行了一个大表导入后,

no-alt

校准的值比预估高一些

no-alt

但是付出的代价也是触目惊心的

no-alt

负载校准的值是比实际要高一些,不过从tikv的表现来看,它更像是在警告我,最好不要跑到这么高的RU。

听人劝吃饱饭,改。

给dmuser添加资源管控

tikv的内存告警一直是让我觉得战战兢兢的原因。而tikv也经常用实际行动告诉我,4核8g这个乞丐版的配置对tikv来说是不靠谱的。

经过上面的测试,我决定还是按照预估的数字36000RU来设置dmuser这个偏向写的用户的RU上限,负载校准后的值是比这个高,但代价是不稳定,这就没有办法采纳了。

CREATE RESOURCE GROUP max_write_rg RU_PER_SEC = 36000 PRIORITY = MEDIUM;

BURSTABLE参数不采用。原因同样是集群的稳定,我怕临时BURSTABLE一下,tikv又挂了。

绑定dmuser到这个资源组。

ALTER USER dmuser RESOURCE GROUP max_write_rg;

因为绑定后只对新建会话有用,干脆重启一下角色为tidb的节点

tiup cluster restart <cluster_name> -R tidb

再执行导入,4核8g的配置,cpu最高也就在350%左右徘徊,不会再跑到380%以上去了。

执行导入的时候对读取任务也没有任何影响。

no-alt

可以看到导入开始,写流量和读流量就变成两条平行线。中途有读取进来的时候,读流量会快速越过写流量,但写流量不会有任何抖动。有序,多么美妙。

在导入期间的database time拆解如下:

no-alt

可以看到dm大表导入任务相关的replace和commit耗时明显变长。其他读取相关的操作时间也变长了一些,但绝对在可以接受的范围内。delete和update耗时也在可以接受的范围,说明其他进入到sync环节的dm同步任务并没有受到显著的影响。

既然看上去稳定多了,就该浪一点了。

上一篇完成了生成列的改造,上游10+个库的日志表都需要全部重新导一遍。7.1版本之前我反复提醒:大表的导入task最好是错开执行,那现在就多起几个大表的导入task看看。把task中的pool-size调回默认值。不特别关注该参数设置。起多个task。观察tikv一直稳定运行,再也没有发生tikv轮流挂的情况。

no-alt

事实上,自从将dmuser加入资源管控之后,即使是我这个乞丐版的4核8g配置的tikv也再没有挂过。一直稳定运行到现在。

资源管控的问题

从我粗浅的认知来说:资源管控的问题在于,读写RU不能分开限制

从某种程度上,我觉得资源管控对我的系统稳定性的贡献这么大,完全是因为在当前这个场景下,我的读写用户是完全分离的。 我可以根据oltp_write_only估算的RU数量给dmuser设置资源组。 我还可以根据oltp_read_only估算的RU数量给biuser设置资源组。 这两个组都能确保各自RU的用量不会超过他们各自实际行为的上限。 哪怕我能看到如下这个提示信息,

no-alt

而实际使用过程中,集群的稳定,确实是被资源管控有力的保证了。

但如果以后从mysql完全转向TiDB,情况就会变得复杂,每个游戏服执行的是读写混合负载。 当前集群读写RU并不均衡,读只有7000,而写是3w6000. 我估计到时候我只能设置一个7000RU的资源组取读写这两者的最小值,作为混合负载的用户的资源组。 当然这个判断是武断的,因为我的集群实际已经是生产系统了,我也没想出更好的混合负载测试方案。 这方面我还要多学习其他大佬的资源组设置方式。

后记

从4月开始有想法,到目前基本改造完成,对数据库再无任何数据获取死角。 大部分统计都可以在10s以内获得结果——在没有资源上tiflash的情况下。如果业务人员对这个结果有任何疑问,只要慢慢去掉聚合的维度和聚合的函数,就可以直接追踪到原始记录。 这个上钻/下钻的过程是流畅的。因为不会影响上游生产环境,可以大胆的鼓励业务人员在数据中探索。 从mysql迁移到TiDB的过程也是愉快的。 全部使用4核8g来组成这个集群,也来我自己对于分布式系统的一个根深蒂固的认知。 即,分布式系统从诞生的第一天起,就不是为了让更大马才能拉更大的车。它从诞生的第一天起,解决的问题就是蚂蚁如何咬死象。 虽然有点运气的因素——7.1版本恰好发布了资源管控特性,保证了集群资源不足时的稳定性。 但这也同时证明了,TiDB是一个好的分布式系统。 好的分布式系统就应该能应付这种情况。 TiDB证明了自己。也证明了我的选择没有错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mobaxterm远程桌面连接Linux

有很多远程桌面软件&#xff0c;如FastX&#xff0c;MSTSC&#xff0c;还有通过VNC、RDP协议走的。Mobaxterm作为极其优秀的软件&#xff0c;也可以这么干。但不知道为什么&#xff0c;总是设置不好&#xff08;可能是linux服务器端没设置好&#xff09;。下面记载一种方法&…

百度网盘删除“我的应用数据”文件夹

方法一&#xff1a;电脑端 工具链接&#xff0c; BaiduPCS-Go-3.6.8-windows-86.zip - 蓝奏云 电脑端下载解压运行&#xff0c;弹出浏览器窗口和命令行&#xff0c;在浏览器中输入百度网盘账号密码&#xff0c;登录。 之后会需要输入验证码&#xff0c;之后使用手机号或者邮…

Mysql查询

Mysql查询 一.DQL基础查询1.语法2.特点3.查询结果处理 二.单行函数(1)字符函数(2)逻辑处理(3)数学函数(4)日期函数 三.分组函数四.条件查询五.比较六.模糊查询七.UNION和UNION ALL(1)UNION(2)UNION ALL 八.排序九.数量限制十.分组查询 一.DQL基础查询 DQL&#xff08;Data Que…

【Java遇错】Error: failed to initialize Sentinel CommandCenterLog

问题描述&#xff1a; 引入sentinel的相关依赖之后&#xff0c;启动项目服务&#xff0c;发现如下错误 Error: failed to initialize Sentinel CommandCenterLog java.lang.NoClassDefFoundError: com/alibaba/csp/sentinel/log/LoggerSpiProviderat com.alibaba.csp.sentin…

【openGauss数据库】--运维指南04--数据导入

【openGauss数据库】--运维指南04--数据导入 &#x1f53b; 一、openGauss导入数据&#x1f530; 1.1 概述&#x1f530; 1.2 INSERT语句写入数据&#x1f530; 1.3 gsql元命令导入数据&#x1f530; 1.4 使用gs_restore命令、gsql命令导入数据&#xff08;主要&#xff09; &a…

[毕业设计baseline]tkinter+flask的毕业设计开发baseline

一.前言 最近开发了一个结合了tkinter和flask框架的GUI页面服务器。目前可以想到的开发方向有。 1.基于python的局域网聊天系统。 2.服务器管理系统。 3.网络安全防御系统。 接下来就来介绍一下这个框架以及开发方向的详细思路。如果计算机专业的本科毕业生感兴趣可以用pyt…

35.RocketMQ之Broker端消息存储文件详解

highlight: arduino-light Broker端文件详解 dubbo的核心是spi&#xff0c;看懂了spi那么dubbo基本上也懂了。对于rmq来说&#xff0c;它的核心是broker&#xff0c;而broker的核心是commitlog、consumequeue、indexfile&#xff0c;而这些文件对应的最终都是MappedFile&#x…

使用OpenCV在图像上绘制质心

这段代码中已经实现了在图像上绘制质心的功能。质心,也称为重心,是物体质量分布的几何中心,可以通过物体质量和位置的加权平均来求得。 在这个程序中,图像的质心(重心)是通过计算像素强度(可以被看作是“质量”)的加权平均位置得到的。图像上每一个像素都有一个位置(…

软件设计模式与体系结构-软件体系-数据流风格软件体系结构

二、数据流风格软件体系结构 概念 数据流系统的各软件组件在无数据到达时处于休眠状态&#xff0c;当有数据到达时&#xff0c;该软件组件被激活&#xff0c;开始对数据进行处理。数据流风格软件体系结构将整个软件系统看作由一系列作用在连续数据集合上的“变换”组成。数据…

学无止境·MySQL(3-2)

单表查询试题 单表题目一1、创建表2、查询出部门编号为30的所有员工3、所有销售员的姓名、编号和部门编号4、找出奖金高于工资的员工5、找出奖金高于工资60%的员工。6、 找出部门编号为10中所有经理&#xff0c;和部门编号为20中所有销售员的详细资料。7、找出部门编号为10中所…

Elasticsearch + Kibana实现词云

需求 实现文件导入es&#xff0c;支持格式TXT、DOC、PPT、XLS、PDF、图片ik分词器远程热更新自定义扩展字典和停用字典Kibana配置词云&#xff0c;并显示对应文档详情和字典频次&#xff0c;且自定义显示字典 技术点 文件导入&#xff1a;es插件ingest-attachment图片文字识…

Nuxt3如何新建项目

第一步 创建项目 1.新建一个文件目录 nuxt-app 2.命令行cd到目录下运行 npx nuxi init nuxt-test 回车运行下 nuxt-test是文件名自己随意 3.再cd nuxt-test到目录下 运行npm install 4.运行完成后 npm run dev 启动项目 显示以下页面 第二步 修改入口代码,编写自己的代码 1.…

从零开始的PICO教程(2)--实时预览应用场景

从零开始的PICO教程&#xff08;2&#xff09;–实时预览应用场景 基于串流能力&#xff0c;你可以通过 PDC 工具在头戴上实时预览应用内场景。​ 文章目录 从零开始的PICO教程&#xff08;2&#xff09;--实时预览应用场景一、提示信息​二、准备工作​三、操作步骤​四、故…

SpringBoot3【④ 基础特性(外部和内部化配置,整合Junit)】

1. SpringApplication 1.1. 自定义 banner 类路径添加banner.txt或设置spring.banner.location就可以定制 banner推荐网站&#xff1a;Spring Boot banner 在线生成工具&#xff0c;制作下载英文 banner.txt&#xff0c;修改替换 banner.txt 文字实现自定义&#xff0c;个性化…

笔记本没有WIFI列表解决方案

是否有网络图标类似于地球的图案 打开个性化 点击打开或关闭系统图标 查看网络那一项是否是打开 如果没有打开就打开注册表 如果不是上图中的数据&#xff0c;就右键新建输入以上的数据。如果还是不能解决就进行如下操作 打开控制面板&#xff0c;打开网络与Internet,再打…

初出茅庐的小李博客之机智云获取网络实时时间(NTP)

机智云获取网络实时时间 机智云代码中其实这么一个函数gizwitsGetNTP( )可以获取网络时间&#xff0c;今天就在STM32F407上教大家如何通过机智云获取NTP网络时间。 简单介绍一下NTP: 网络时间同步现在有2种同步协议NTP和PTP&#xff0c;NTP与PTP不同在于时间戳的产生位置。N…

Kubernetes对象深入学习之二:细说schema.ObjectKind

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 在前文咱们对对象体系有了大概了解&#xff0c;接下来就要按照前面换分的三个知识区域逐个深入学习&#xff0c;今天从最简单的对象类型开始 runtime.Object…

PWM 输出实验(stm32)

目录 PWM的代码pwm.cpwm.h main.c 说明&#xff1a;以下内容参考正点原子的资料 PWM的代码 pwm.c //TIM3 PWM部分初始化 //PWM输出初始化 //arr&#xff1a;自动重装值 //psc&#xff1a;时钟预分频数 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitSt…

华为云CodeArts Build-云端化的编译构建平台

随着互联网企业业务种类增多&#xff0c;业务跨平台&#xff0c;多语言编程成为常态。 传统应用软件为本地应用&#xff0c;业务复杂&#xff0c;软件规模大&#xff0c;编译构建耗时长&#xff0c;而且移动终端APP业务变化快&#xff0c;交付要求短平快。 因此一个支持多语言…

环型链表oj

文章目录 题目描述解决方法 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中…