TiDB 资源管控的对撞测试以及最佳实践架构

作者: GreenGuan 原文来源: https://tidb.net/blog/bc405c21

引言

TiDB 是一个存算分离的架构,资源管控对这种分离的架构来说实现确实有非常大的难度,TiDB 从 7.1 版本开始引入资源管控的概念,在社区也有不少伙伴测试,测试结果大部分在 RU 的隔离上得到了验证,资源管控在业务上带来的价值是利用提高用户密度的方式来降低成本,同时还可以通过资源管控的方式抑制不同类型的业务来避免集群抖动,但是随着我们业务在不断发展,用户在增加,集群的资源也在变化(缩容,扩容),在这种动态发展的模式下,如何评估我们的 TiDB 动态容量,以及什么架构才能发挥资源管控的最大能力是本文讨论的点,本文会从业务的角度作为切入点来反向观察集群的状态。

资源管控验证目标

  1. OLTP vs OLTP 是否存在相互影响情况,包括 业务层(TPS、QPS、duration)
  2. OLTP vs OLAP 是否存在相互影响情况,包括 业务层(TPS、QPS、duration)
  3. OLAP vs OLAP 是否存在相互影响情况,包括 业务层(TPS、QPS、duration)

环境介绍

最小化部署 3pd,3tidb,3tikv

TiDB 节点:为了公平 pd 和 tidb 为混合部署,所有组件类如 Prometheus grafana alertmanager pd(L|UI)都放在一个 pd 机器上,让剩余的两个 tidb 的计算节点负载相同

TiKV 节点:单机多实例部署,每个实例在部署 tikv 时都做了资源隔离,这样做的意义在于当 tikv 节点跑满时,最多用到 16c

resource_control:    memory_limit: 150G    cpu_quota: 1600%

实验设计

TiDB 是存算分离的分布式数据库,多种不同类别的 SQL 难免会集中到一个 tidb 的计算节点上,而数据库中我们分为 OLTP 类业务和 OLAP 类业务,在这里我想说明下这两种业务的区别

OLTP 类的业务特点是短小的 SQL 语句,考验的是数据库处理高并发量的能力,常用的模拟工具有 sysbench,tpcc 等工具;

OLAP 类的业务特点是计算型的 SQL 语句,考验的是数据库优化器的能力,常用的模拟工具有 tpch 等工具;

综上所述,我们可以到如下集中测试的基本场景

压力来自相同的计算节点

image.png

压力来自不同的计算节点

image.png

再下来我们设计一下压测的样例,压测需要有如下的限制和数据

  1. 基于我们的验证目标(验证资源管控是否生效),那么无论是 tidb, tikv 的各种资源 (cpu,mem,network) 就不能打满,因为打满必定受到影响

  2. 得到基线数据,基线数据是指无负载情况下的 qps 和 p95 响应延时,为了后续做对比

  3. tidb 的资源管控组和用户为强绑定关系,我们为每个用户都单独设置一个资源组,也就是 1 对 1 的对应关系,这样可以让单租户把资源吃满

TiDB 租户和资源组对应关系

image.png

压测样例

压测编号 压测场景 压测样例 压测用户 备注
t1_s1vss2 oltp vs oltp 相同 tidb S1 vs S2
t1_s2vss1 oltp vs oltp 不同 tidb S1 vs S2
t2_s1vss3 oltp vs oltp 相同 tidb S1 vs S3
t2_s3vss1 oltp vs oltp 不同 tidb S1 vs S3
t3_s1bvss2 oltp vs oltp 相同 tidb S1(b) vs S2 b 的是超卖场景在我们的场景中采用 64 并发
t3_s2vss1b oltp vs oltp 不同 tidb S1(b) vs S2
t4_s1bvss3 oltp vs oltp 相同 tidb S1(b) vs S3
t4_s3vss1b oltp vs oltp 不同 tidb S1(b) vs S3
t5_s2vss3 oltp vs oltp 相同 tidb S2 vs S3
t5_s3vss2 oltp vs oltp 不同 tidb S2 vs S3
t6_s1vss4 oltp vs olap(Q16) 相同 tidb S1 vs S4
t6_s4vss1 oltp vs olap(Q16) 不同 tidb S1 vs S4
t7_s1vss5 oltp vs olap(Q16) 相同 tidb S1 vs S5
t7_s5vss1 oltp vs olap(Q16) 不同 tidb S1 vs S5
t8_s2vss4 oltp vs olap(Q16) 相同 tidb S2 vs S4
t8_s4vss2 oltp vs olap(Q16) 不同 tidb S2 vs S4
t9_s2vss5 oltp vs olap(Q16) 相同 tidb S2 vs S5
t9_s5vss2 oltp vs olap(Q16) 不同 tidb S2 vs S5
t10_s2vss6 oltp vs olap(Q16) 相同 tidb S2 vs S6
t10_s6vss2 oltp vs olap(Q16) 不同 tidb S2 vs S6
t11_s1bvss6 oltp vs olap(Q16) 相同 tidb S1(b) vs S6
t11_s6vss1b oltp vs olap(Q16) 不同 tidb S1(b) vs S6
t12_s4vsS6 olap vs olap (Q16) 相同 tidb S4 vs S6
t12_s6vsS4 olap vs olap (Q16) 不同 tidb S4 vs S6
t13_s4vsS6 olap vs olap (Q11) 相同 tidb S4 vs S6
t13_s6vsS4 olap vs olap (Q11) 不同 tidb S4 vs S6
t14_s4vsS6 olap vs olap (Q7) 相同 tidb S4 vs S6
t15_s6vsS4 olap vs olap (Q7) 不同 tidb S4 vs S6
t12_s4vsS6_f olap vs olap (Q16) 相同 tidb S4 vs S6 f 的是加入了 tiflash
t12_s6vsS4_f olap vs olap (Q16) 不同 tidb S4 vs S6
t13_s4vsS6_f olap vs olap (Q11) 相同 tidb S4 vs S6
t13_s6vsS4_f olap vs olap (Q11) 不同 tidb S4 vs S6
t14_s4vsS6_f olap vs olap (Q7) 相同 tidb S4 vs S6
t15_s6vsS4_f olap vs olap (Q7) 不同 tidb S4 vs S6

枯燥的压测过程和数据见压测过程章节,如果想省时间直接看结论,当然压测过程章节也会有一些解读

实验结论

  1. OLTP vs OLTP:

    1. RU 管控方面,相同资源管控组的不同用户,在同时执行 SQL 时,不会超出资源管控所设置的最大 RU 值(超卖参数除外)
    2. 不同资源管控组的不同用户,在不同的 TiDB 计算节点上的 QPS 基本持平(有时还会超出基线数据),P95 相同
    3. 不同资源管控组的不同用户,在相同的 TiDB 计算节点上会有相互影响的情况,大约会有 8% ~ 10% 的影响
    4. 关于资源组的优先级,经测试不同资源管控组的优先级几乎没有差别( T5 场景);
    5. 如果两个不同的资源组运行在不同的计算节点则没有影响(最佳实践)
  2. OLTP vs OLAP:

    1. 当 OLTP 平稳运行时遭遇 OLAP 业务会产生抖动,具体抖动延时需要看 OLAP 业务的 SQL 语句造成的影响
    2. 当 OLTP 和 OLAP 在相同计算节点上执行时,P95 会有 8% 的下降,总体可以接受
    3. 当 OLTP 和 OLAP 在相同计算节点上执行时,并且分配给 OLAP 业务的 RU 较少(一般为 OLAP 业务的 1/5 ),P95 会有 20% 的下降
    4. 当 OLTP 和 OLAP 在相同计算节点上执行时,OLAP 业务表现会有 20% 左右的衰减(不过感觉 AP 类业务多个几秒钟无所谓)
    5. 如果 AP 和 TP 类 SQL 分别运行在不同的 TiDB 计算节点上时,则影响最小(既做 AP 类资源限制又在计算层做资源隔离为最佳实践)
  3. OLAP vs OLAP:

    1. 当 OLAP 和 OLAP 在相同计算节点上执行时,查询效率会有下降(实测中发现过原来 300s 跑出的语句,时间翻倍)
    2. 从返回结果看 OLAP 的资源优先级在实测过程中 medium 和 low 的差别不大
    3. 加入 TiFlash  后,OLAP 的 SQL 语句在相同与不同的计算同时执行时,耗时相差不大
    4. 运维方面的问题:不确定SQL 语句在 TiFlash 中占用了多少 RU
    5. OLAP 的业务在不同的计算节点上的效率最高

最佳实践架构

image.png

这个 TiDB 架构应该是我理解的最佳实践了,从实验数据我们可以看到,即使我们开启了资源管控,两种不同业务类型同时请求同一个计算节点时,对其他的用户也是有一些抖动的,而从运维层面来说,要么降低租户的 RU,要么在计算节点进行隔离,从架构的角度出发,计算资源用 VIP 隔离开来,来达到专机专用的目的,存储节点通过 RU 来进行限制 IO,两层保护对稳定性有正向收益

实验过程

基线数据

用户 32 64
S1  单独 12496.5 23012.84
S2  单独 12126.05 16500.92
S3  单独 12754.42 16514.15

OLTP vs OLTP

实验场景 t1_s1vss2、t1_s2vss1

image.png

image.png

S2 QPS 的基线确是很奇怪,在进行基线压测的时候不确定集群发生了什么,导致基线 S2 用户的基线数据较低,不过不影响结论

image.png

image.png

延时越小越好

实验场景 t2_s1vss3、t2_s3vss1

image.png

image.png

image.png

image.png

实验场景 t3_s1bvss2、t3_s2vss1b

1.png

可以看到超卖参数生效了 S1 在的 RU 在 50000,QPS 应该在 15000 ~ 16000,但是在 64 并发下来到了 20000+

image.png

在 S1 超卖的场景下,S2 在同一个 TiDB 计算节点上收到的影响比较严重大约有 12% 的影响

image.png

image.png

实验场景 t4_s1bvss3、t4_s3vss1b

image.png

image.png

S3 用户的优先级是 low 与 S2 用户 medium 相比,他们的 QPS 并没有差多少,S1 用户已经超卖了,讲道理应该优先保证 S1 用户的资源使用,这里难道是资源没有打满吗?

image.png

image.png

实验场景 t5_s2vss3、t5_s3vss2

image.png

image.png

image.png

image.png

符合预期,因为在同一个 tidb 节点上会有相互影响的情况

OLTP vs OLAP

实验场景 t6_s1vss4、t6_s4vss1、t7_s1vss5、t7_s5vss1

说明:S4 和 S5 的区别为:S4 RU 25000;S5 RU 800

image.png

由上图可以观察到,最糟糕的情况就是 TP 业务和 AP 业务同时在一个计算节点上,延时几乎翻倍(当然也要看是什么类型的 SQL),其次是相同 TIDB 下的对 AP 业务进行 RU 限制,总体来说响应延时增加了 25%,接下来就是两个不同 TIDB 的不做限制(黄)和做限制(浅蓝),抖动可忽略不计

实验场景 t8_s2vss4、t8_s4vss2、t9_s2vss5、t9_s5vss2

1.png

S1 和 S2 的图形基本相似

实验场景 t10_s2vss6、t10_s6vss2

说明:S6 的优先级为 Low

image.png

当初我还以为 low 的优先级不会影响 medium 的优先级,但是从图形来看并不是这样的

实验场景 t11_s1bvss6、t11_s6vss1b

说明:S1b 代表 S1 用户会突破自己的 RU 50000,采用 64 并发压测

image.png

和上图基本相似

OLTP vs OLAP 的测试中,如果我们调转视角,从 OLAP 的角度,看 OLTP 是否影响了 OLAP 的响应时间,直接说结论(这里就不放图了),经过测试,影响的因素有两个,第一、是否在同一个 TiDB 上运行(差几秒 AP 类业务可忽略);第二、看 RU 设置的多少,其中第二为主要影响的因素。

OLAP vs OLAP

实验场景 t12_s4vsS6、t12_s6vsS4、t13_s4vsS6、t13_s6vsS4、t14_s4vsS6、t15_s6vsS4

说明:S4 和 S6 RU 都一样,只有优先级不一样,S4 是 medium,S6 是 low

image.png

image.png

从优先级角度来说,返回速度不到明显的差异,还有 S6 视角有两个 0 ,出现在 Q11 和 Q7,这次都没有出结果,Q11的报错:Exceeded resource group quota limitation ,Q7 的报错 Query execution was interrupted,不确定这两个没有出结果的测试是否和 S6 用户的 low 有关,顺带说一句 Q11 和 Q7 这两个大 SQL,把没有 tiflash 的集群的 tidb 网卡直接跑满了,这肯定会影响其他业务的,可见资源管控对网卡的控制(或者说 RU 的计算)有待加强。

实验场景 t12_s4vsS6_f、t12_s6vsS4_f、t13_s4vsS6_f、t13_s6vsS4_f、t14_s4vsS6_f、t15_s6vsS4_f

image.png

image.png

好消息是把 AP 的表加入到 TiFlash 中没有出现 SQL 无法跑出结果的情况,大部分 SQL 的结果大致相似,在运维层面,这几个 SQL 明显是走了 TiFLash 的,但是在 grafana 监控中,只有 RU(max)的监控有 SQL 资源组的消耗情况,RU 并没有,希望补充一下

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

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

相关文章

论文速递 | Management Science 4月文章合集(下)

编者按 在本系列文章中,我们梳理了运筹学顶刊Management Science在2024年4月份发布有关OR/OM以及相关应用的13篇文章的基本信息,旨在帮助读者快速洞察领域新动态。本文为第二部分(2/2)。 推荐文章1 ● 题目:Social Le…

模拟面试之外卖点单系统(高频面试题目mark)

今天跟大家分享一个大家简历中常见的项目-《外卖点单系统》,这是一个很经典的项目,有很多可以考察的知识点和技能点,但大多数同学都是学期项目,没有实际落地,对面试问题准备不充分,回答时抓不到重点&#x…

Handling `nil` Values in `NSDictionary` in Objective-C

Handling nil Values in NSDictionary in Objective-C When working with Objective-C, particularly when dealing with data returned from a server, it’s crucial (至关重要的) to handle nil values appropriately (适当地) to prevent unexpected crashes. Here, we ex…

VBA递归过程快速组合数据

实例需求:数据表包含的列数不固定,有的列(数量和位置不固定)包含组合数据,例如C2单元格为D,P,说明Unit Config有两种分别为D和P,如下图所示。 现在需要将所有的组合罗列出来,如下所示…

git上传本地项目及更新项目

1、注册GitHub账号和下载git 2、在GitHub上新建一个仓库,点击号——>New repository,给仓库起一个名字,点击Create repository 3、进入要上传的项目中,右键点击git back here,命令行输入git init初始化&#xff0c…

全球电力电子测试方案专业提供商「艾诺仪器」×企企通召开项目启动会,推进企业采购数智化升级

导读 供应链管理已成为企业的核心竞争力之一,为应对快速变化的市场环境,艾诺仪器亟需强化采购管理和供应链协同的竞争力。SRM涉及到各事业部、各所属企业等多个层面,希望通过双方优势资源的整合,打造高效协同、科学智能的数字化采…

数据挖掘概览

数据挖掘(Data Mining)就是从大量的,不完全的,有噪声的,模糊的,随机的实际应用数据中,提取隐含在其中的,人们事先不知道的,但又是潜在有用的信息和知识的过程. 预测性数据挖掘 分类 定义:分类就是把一些新的数据项映射到给定类别中的某一个类别 分类流程&#x…

Python | Leetcode Python题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; def reverse(nums: List[int], left, right) -> None:i, j left, rightwhile i < j:nums[i], nums[j] nums[j], nums[i]i1j-1 class Solution:def rotate(self, nums: List[int], k: int) -> None:n len(nums)k % nreverse(num…

Midway + TypeORM项目部署到BT后启动失败,MySQL报错

Midway TypeORM项目部署到BT后启动失败&#xff0c;MySQL报错 前沿 您需要先了解这篇文章&#xff1a;https://blog.csdn.net/weixin_45687201/article/details/139336111 错误日志 服务状态开启后就失败项目日志&#xff0c;输出 \> my-midway-project1.0.0 start \&…

【Python新手入门指南】Linux-conda环境安装与使用参考

文章目录 前言一、conda是什么&#xff1f;二、安装步骤三、使用Conda来管理Python环境1. 创建环境2. 激活环境3. 安装软件包4. 查看环境5. 删除环境&#xff1a;如果您不再需要某个环境&#xff0c;可以使用以下命令将其删除&#xff1a; 前言 如果你是一位经验丰富的Python开…

【SQL Server数据库】熟悉DBMS的基本操作及数据库的创建

目录 一、SQL SERVER基本操作 二、用Management Studio创建数据库 1、使用Management Studio创建数据库bookdb&#xff0c;各项参数采用默认设置。 2、使用Management Studio创建数据库EDUC 3. 在EDUC中创建三个表&#xff0c;根据下面要求创建Student&#xff0c;Course&am…

昇思25天学习打卡营第01天|基本介绍快速入门

一、什么是昇思MindSpore&#xff1f; 昇思MindSpore是一个全场景深度学习框架&#xff0c;详见基本介绍 那什么是深度学习呢&#xff1f; 深度学习是一种特殊的机器学习&#xff0c;主要是利用了多层神经网络模拟人脑&#xff0c;自动提取特征并进行预测。 什么是机器学习…

【C++】模板详解

前言&#xff1a;在之前的学习我们发现我们无时无刻都用到模板这个东西&#xff0c;但是博主一直没有进行讲解&#xff0c;今天我们就一次性对模板进行一个整体的学习与讲解。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#…

计算机毕业设计Python+LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能

基于TensorFlow-LSTM的股票预测系统开题报告 一、研究背景与意义 随着信息技术的飞速发展&#xff0c;股票市场作为现代经济活动的重要组成部分&#xff0c;其价格波动受到广泛关注。投资者们迫切希望通过科学的方法预测股票价格&#xff0c;以优化投资决策&#xff0c;实现利…

【Java06】Java中的类与对象

1. 类和对象 Java中的类模版如下&#xff1a; [修饰符] class 类名 {0~n个构造器;0~n个成员变量;0~n个成员方法; }构造器是类创建对象的根本途径。如果没有显式定义构造器&#xff0c;系统会默认提供一个。成员变量、成员方法的定义和C类似&#xff0c;只不过多了修饰符。 Ja…

前端基础——自学习梳理

超文本协议HTML <!DOCTYPE HTML> <html><head><meta charset"utf-8"> <style> /*Css*/.sty1{height:100px;width:100px;background-color: red;margin-top: 10px;float:left;margin-left: 10px;box-shadow: 10px 10px 10px #0000…

多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

Linux 运维王者从不离手的10款工具

运维工程师在日常工作中频繁运用的10款工具&#xff0c;并细致阐述每款工具的功能、适用场景以及其卓越之处。 1. Shell脚本 功能&#xff1a;主要用于自动化任务和批处理作业。 适用场景&#xff1a;频繁用于文件处理、系统管理、简单的网络管理等操作。 优势&#xff1a;灵…

Java 抽象类

目录 1、什么是抽象类 2、定义抽象类 3、抽象类特性 4、 抽象类的作用 1、什么是抽象类 抽象类&#xff0c;顾名思义就是抽象的。该类没有包含足够的信息去描绘一个具体的对象&#xff0c;这样的类称为抽象类。抽象类着一种优化了的概念组织方式&#xff0c;它是所有子类的…

研究上百个小时,高手总结了这份 DALL-E 3 人物连续性公式(上)

上篇 Dall-E 3 讲了常见的 20 个公式&#xff0c;今天单独来讲一下人物连续性公式&#xff0c;这个公式来自 AshutoshShrivastava。 上篇回顾&#xff1a; 效果超好&#xff01;全新 DALL-E 3 必须掌握的 20 种公式使用方法上周末&#xff0c;DALL-E 3 正式加入 ChatGpt&…