你需要什么样的资源隔离?丨TiDB 资源隔离最佳实践

导读

资源隔离是数据库性能优化的重要环节, TiDB 在当前版本已经实现了从数据级隔离到流控隔离的全面升级 ,无论是多系统共享集群、复杂负载隔离,还是小型系统整合和 SQL 精细化控制,TiDB 都提供了灵活且高效的解决方案。

本文以实际案例为切入点,详细解读了 Placement Rules in SQL、Resource Control 等关键功能,以及 7.2+ 版本新增的 Runaway Queries 管理机制, 帮助各位开发者和管理员选择最适合自己的 TiDB 资源隔离方案。


你需要什么样的隔离?

时至今日,TiDB 提供的隔离能力愈发完善,上到不同系统、下到 SQL 语句,均能实现良好的隔离效果。本文旨在帮助大家了解:你需要什么层面的资源隔离,以及各种层面隔离如何使用。

你需要什么层面的资源隔离

基于数据的隔离方案

中大型系统之间隔离

在提及资源隔离时,大家往往想到的是:多个系统共用一套集群,如何限制每个系统所用的资源。在之前版本中,TiDB 提供了基于 K8s 的 Cloud TiDB 方案,但企业 DBA 很少同时具备 K8s 和数据库两种技能;另外企业中 K8S 大部分也非原生,不一定满足 Cloud TiDB 的部署需求。

从 6.5 版本开始,TiDB 提供了 Placement Rules in SQL 功能,一种基于 SQL 规则的数据放置策略,可以轻松实现数据级别的物理隔离,使得多个系统共用一套 TiDB 集群时,满足物理层面隔离的需求。

典型场景:多系统共用集群并完全独占资源

多系统共用集群并完全独占资源

典型客户案例: TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进

示例: Placement Rules in SQL 规则(适合中大型系统)

create placement policy policy_order constraints="[+zone=order]"; 
create placement policy policy_inv constraints="[+zone=inventory]"; 
alter database retail_order placement policy policy_order;
alter database retail_inventory placement policy policy_inv;
典型场景:每个系统仅独占一个实例、单点故障时共享

每个系统仅独占一个实例、单点故障时共享

典型客户案例: 某领先零售企业 TiDB 生产集群架构

示例: Placement Rules in SQL 规则(适合中型系统)

create placement policy policy_server1 leader_constraints="[+host=host1]"; 
create placement policy policy_server2 leader_constraints="[+host=host2]"; 
create placement policy policy_server3 leader_constraints="[+host=host3]"; 
alter database DB1 placement policy policy_server1;
alter database DB2 placement policy policy_server2;
alter database DB3 placement policy policy_server3;

系统内不同负载隔离

以上是多个系统之间的隔离,在一个业务系统内,同样也会有基于负载的隔离需求(如 OLTP 和 ETL/报表两种负载);也就是过去常提及的读写分离,在一套数据库内,实现两种负载的隔离。

在使用 TiDB 时,由于一套集群已经由多台服务器组成,如再建设一套配置相同的备集群来实现,此时成本相对是比较高的。从 6.5 版本开始,也可以轻松使用 Placement Rule/Placement Rules in SQL + Follower 副本读取策略来实现,同时与传统主备/主从读写分离相比:TiDB 的只读区域(含 TiKV/TiFlash)可提供与联机完全一致的查询能力。

典型场景:联机事务处理 +ETL|BI 隔离

联机事务处理 +ETL|BI 隔离

典型客户案例: HTAP 还可以这么玩?丨TiDB 在 IoT 智慧园区的应用

示例:

  • Placement Rules in SQL 规则(针对业务数据,Leader 分布在前两台 TiKV);
create placement policy policy_eyas leader_constraints="[-zone=zone3]"; 
alter database eyas placement policy policy_eyas;
  • Placement Rules in SQL 规则(针对运营数据,Leader 分布在第三台 TiKV);
create placement policy policy_bi leader_constraints="[+zone=zone3]" follower_constraints ='{"+zone=zone1": 1,"+zone=zone2": 1}';
alter database bi_eyas placement policy policy_bi;
alter database da_ping placement policy policy_bi;
alter database eyasbi placement policy policy_bi;
  • 业务库+运营库均增加列存副本;
  • TiDB 设置就近读。
set global tidb_replica_read = 'closest-replicas';
典型场景:联机事务处理+复杂查询隔离

联机事务处理+复杂查询隔离

典型案例: 2 机房双活+1 机房就近只读

注: zone 是 tikv 中一个 label 的定义,可以代表一个真实的机房,也可以单机房集群中设计一个 zone

示例:

  • Placement Rule 规则(设置全局 Leader 和 Follower 分布策略), 机房 q03 不分布任何 Leader,同时 q03 机房进行本地读取;
[
    {
        "group_id": "pd",
        "id": "q01",
        "start_key": "",
        "end_key": "",
        "role": "voter",
        "count": 1,
        "label_constraints": [
            {"key": "zone", "op": "in", "values": ["q01"]}
        ],
        "location_labels": ["host"]
    },
    {
        "group_id": "pd",
        "id": "q02",
        "start_key": "",
        "end_key": "",
        "role": "voter",
        "count": 1,
        "label_constraints": [
            {"key": "zone", "op": "in", "values": ["q02"]}
        ],
        "location_labels": ["host"]
    },
    {
        "group_id": "pd",
        "id": "q03",
        "start_key": "",
        "end_key": "",
        "role": "follower",
        "count": 1,
        "label_constraints": [
            {"key": "zone", "op": "in", "values": ["q03"]}
        ],
        "location_labels": ["host"]
    }
]
  • TiDB 设置就近读。
set global tidb_replica_read='closest-replicas';

基于流控的的隔离方案

基于数据隔离的方案虽然能够有效地实现 CPU、内存、磁盘等资源的物理隔离,但也存在一定的灵活性问题:

  • 数据需要与存储节点进行绑定(也就是资源的最小单位是节点),该方案仅适用于中大型系统之间的隔离,基本不适应于小型系统
  • 在扩缩容时,该方案可能需要迁移底层数据,无法立即生效
  • 如果集群中仅有一套库表供多个系统共享,此时基于数据的隔离方案便无法工作了

为了解决以上不足,TiDB 自 7.1 版本起引入了基于流控的隔离方案 - Resource Control,目的是简化分布式架构中资源管理的复杂度:

  • 将 CPU、IO、网络等资源统一抽象为资源单位(RU),大幅简化对资源的定义
  • 提供数据库用户、SQL 语句、后台任务等三个层面的资源隔离
  • 在扩容或缩容时,资源调整可以秒级生效,无需迁移数据,提供了极致弹性能力

总的来说,Resource Control 是一种更灵活高效的资源管理方式,不仅能够实现多系统、多负载的隔离,还可以进行 SQL 语句和后台任务层面更精细化的控制。

数据库用户隔离

典型场景 - 小型系统整合

在我过去的经历中,我发现小型数据库系统普遍存在资源利用率较低的情况。实际上,我们在申请数据库资源时,往往基于直觉或者标准化配置来选择资源,背后可能并没有一个明确的依据。另外,多个系统通常负载峰值时间各不相同,在使用传统方案时也只能根据最大峰值+冗余的方式来申请资源,不可避免会出现较多资源闲置。

TiDB 的 Resource Control 方案,使得我们能够在较小的配置下实现更高效的资源利用率。将多个小型数据库系统整合到 TiDB 后,每个系统的资源分配可以根据其实际负载峰值、QPS 等需求进行精细化管理;如果在这些系统中存在一个消耗资源较高的系统,还可考虑分配单独的 TiDB 计算实例供其使用。

小型系统整合

典型客户案例: TiDB 7.1 多租户在中泰证券中的应用

典型场景 - SaaS 场景

SaaS 场景

在以上第三种多租户架构中 ,多个租户共用一个库、同时共用一套表,表内通过分区来存储不同 SaaS 租户的数据,或直接使用单表(通过表内的 tenant_id 字段来区分 ),此时 TiDB Resource Control 可以轻松通过数据库用户来为不同租户进行资源控制。

而面对 SaaS 动辄数千个租户的需求,TiDB Resource Control 是极其有帮助的,无需划分 CPU/内存/节点数量,可创建数据库用户级别的资源组,轻松管理不同租户的资源需求和弹性需求:

三种多租户架构

示例:

  • 假设租户 1 是体量非常大,可为其单独创建数据库用户 user1,并为该用户创建独立资源组,优先级高,且允许超用;
CREATE RESOURCE GROUP rg_tenant1 RU_PER_SEC = 1000000 PRIORITY = HIGH BURSTABLE;
alter user 'user1' RESOURCE GROUP rg_tenant1;
  • 其他租户由于体量较小,共用一个资源池;
CREATE RESOURCE GROUP rg_tenant_default RU_PER_SEC = 500000 PRIORITY = MEDIUM;
alter user 'user_default' RESOURCE GROUP rg_tenant_default;
  • 扩容。
ALTER RESOURCE GROUP rg_tenant_default RU_PER_SEC = 900000 PRIORITY = MEDIUM;
典型场景 - 系统内批量负载隔离

典型客户案例: MySQL 到 TiDB 迁移实践:云盛海宏零售业海量场景下 ToC 系统的选型思考与经验分享

在一个系统中往往会存在联机和批量两种负载,如联机的峰值在白天,到凌晨基本上是业务低峰期,此时可以安全的运行系统内的大型批量作业,进行大规模、高密度的读写,以尽快完成批量作业,进而不影响白天的联机业务。

但有些情况下,批量可能会跑到第二天业务高峰期,此时停止这个批量显然是不太合适的,但放任它继续消耗大量资源执行,显然也是不合适的。

在过去其实缺乏一些库内的管控手段的,只能在调度层、应用层进行有限控制。而 TiDB Resource Control 也可以轻松管理这种情况。

示例: 为批量作业单独创建用户,并绑定资源组:

CREATE USER 'USER_BATCH' IDENTIFIED BY '******';
CREATE RESOURCE GROUP rg_batch RU_PER_SEC = UNLIMITED PRIORITY = HIGH;
alter user 'USER_BATCH' RESOURCE GROUP rg_batch;


-- 假设批量任务超时运行到第二天白天,只需执行如下 SQL 即可立即将其限速
ALTER RESOURCE GROUP rg_batch RU_PER_SEC = 100000 PRIORITY = LOW;

SQL 语句级别隔离

自 7.2 版本以来,TiDB Resource Control 引入了对 Runaway Queries(即执行时间或消耗资源超出预期的查询)的管理功能:

  • QUERY_WATCH(手动处理):对发现的 SQL 进行限流或熔断
  • QUERY_LIMIT(自动处理):当不符合预期的 SQL 出现时,数据库可自己识别、并自适应处理
典型场景 - SQL限流与熔断(QUERY_WATCH)

有一些 SQL 语句可能存在这种情况:编写不规范或需要查询大量数据(如抽数),它们在运行时可能会消耗大量的资源,我们希望它们跑慢一点没关系,但不要消耗太多资源影响正常业务请求。在 TiDB 中,可以轻松通过 Resource Control 来对它们进行限流:

-- 该 SQL 执行时,单独使用 rg1 资源组执行(rg1 是一个 100 RU 的资源)
SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t where is_delete=0 and create_time>='2023-01-01';

-- 将 default 资源组中的这条 SQL 进行降低优先级,让其限速执行
QUERY WATCH ADD RESOURCE GROUP DEFAULT ACTION COOLDOWN SQL TEXT EXACT TO 'select * FROM t where is_delete=0 and create_time>='2023-01-01';

另外也可能存在一种情况,系统内突然出现一条之前从未运行过的大 SQL,它来历不明,我希望先直接将其熔断,不让其执行:

-- 根据 SQL DIGEST 维度进行拦截,并终止
QUERY WATCH ADD RESOURCE GROUP default ACTION KILL SQL DIGEST 'd08bc323a934c39dc41948b0a073725be3398479b6fa4f6dd1db2a9b115f7f57';

-- 另外还可以使用 SQL TEXT 维度(可单独拦截某一特定条件值的 SQL)
-- 以及 PLAN DIGEST 维度(可拦截 SQL 中某一很差的计划出现)
典型场景 - 超出预期的查询自适应管理(QUERY_LIMIT)

基于 QUERY_WATCH 的限流和熔断方案,属于事中或事后的人工处理手段。从问题的出现、发现到最终解决,这一过程往往需要一定的时间;即便是经验丰富、对系统非常熟悉的管理员,在解决完问题时,往往已经过去了数分钟,甚至更长时间。这意味着,业务可能受的影响时间也会与之相关。

而 QUERY_LIMIT 则提供了更加灵活的自适应处理手段,让数据库可以自动发现异常并处理异常,我们只需要定义异常即可:

示例:

  • 创建 rg_auto_cooldown 资源组,限额是 100000 RU,我们可以定义该资源组中执行时间超过 60 秒的查询为 Runaway Query,并让系统自动对 Runaway Query 进行降低优先级限流处理;
CREATE RESOURCE GROUP rg_auto_cooldown RU_PER_SEC = 100000 QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=COOLDOWN);
  • 创 建 rg_over_10000 资源组,限额是 100000 RU,我们可以定义该资源组中每秒超过 10000 RU 的查询为 Runaway Query,并让系统自动对他们进行降低优先级限流处理;
CREATE RESOURCE GROUP rg_colldown RU_PER_SEC = 100000 QUERY_LIMIT=(RU=10000, ACTION=COOLDOWN);
  • 还可以在当前资源组,将大型查询隔离到其他资源组执行:定义 default 资源组中处理数据行数超过 1000000 的查询为 Runaway Query,并让系统自动将他放到 rg_bigquery 资源组中执行,避免与当前资源组中的请求发生争用。
CREATE RESOURCE GROUP rg_bigquery RU_PER_SEC = 10000 PRIORITY = LOW;
-- 假设我当前资源组为 default
ALTER RESOURCE GROUP default QUERY_LIMIT=(PROCESSED_KEYS=1000000, ACTION=SWITCH_GROUP(rg_bigquery));

后台任务级别隔离

在日常运维过程中创建索引是一个常见的工作,虽然在 TiDB 中所有 DDL 均是在线的,但我们也不能忽视创建索引时资源消耗带来的风险。自 7.4 版本开始,TiDB Resource Control 引入了对后台任务的管理。

示例:

以创建索引这一 DDL 任务为例,可以设置 ddl 为后台任务,并且限制其最多可使用 TiKV 节点总资源的 30%。此时系统便会动态地限制该任务的资源使用,以尽量避免此类任务在执行时对其他前台任务的性能产生影响:

ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES='ddl', UTILIZATION_LIMIT=30);

目前 TiDB 支持如下几种后台任务的类型:lightning、br、ddl、stats 等。

总结

通过本文的学习,相信大家对 TiDB 的资源隔离能力有了更全面的理解;大家可以根据不同的场景需求,选择合适的资源隔离方案。

不同类型的隔离方案

如果您有新的资源隔离需求或场景,欢迎与我们联系。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1 行命令引发的 Go 应用崩溃

一、前言 不久前,阿里云 ARMS 团队、编译器团队、MSE 团队携手合作,共同发布并开源了 Go 语言的编译时自动插桩技术。该技术以其零侵入的特性,为 Go 应用提供了与 Java 监控能力相媲美的解决方案。开发者只需将 go build 替换为新编译命令 o…

Python毕业设计选题:基于django+vue的宠物服务管理系统

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 宠物商品管理 医疗服务管理 美容服务管理 系统…

Java连接TDengine和MySQL双数据源

git文件地址:项目首页 - SpringBoot连接TDengine和MySQL双数据源:SpringBoot连接TDengine和MySQL双数据源 - GitCode 1、yml配置 spring:datasource:druid:mysql:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: roo…

三十一、事件过滤处理分析

三十一、事件过滤处理分析eventFilter 实现以下功能 bool QObject::eventFilter(QObject *watched, QEvent *event): 如果已将此对象安装为所监视对象的事件过滤器,则过滤事件。 在你重新实现这个函数时,如果你想过滤掉事件,即停…

C++ QT中Q_Q和Q_D是什么?怎么使用?本质是什么?C++仿写

1.QT中Q_Q和Q_D是什么&#xff1f; Q_Q可以得到外部可以访问的类指针Q_D可以得到内部封装&#xff0c;外部不可达的类指针 2. 怎么使用&#xff1f; 上代码 APrivate.h #pragma once #include <QtCore>class A;class APrivate {Q_DECLARE_PUBLIC(A) public:APrivate(…

三种文本相似计算方法:规则、向量与大模型裁判

文本相似计算 项目背景 目前有众多工作需要评估字符串之间的相似(相关)程度&#xff1a;  比如&#xff0c;RAG 智能问答系统文本召回阶段需要计算用户文本与文本库内文本的相似分数&#xff0c;返回前TopK个候选文本。  在评估大模型生成的文本阶段&#xff0c;也需要评估…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

浅谈云计算21 | Docker容器技术

Docker容器技术 一、 容器技术特性1.1 轻量级特性1.2 隔离性特性 二、容器镜像2.1 容器镜像概述2.1.1 定义与构成2.1.2 分层结构 2.2 联合文件系统2.3 容器镜像的构建与管理2.3.1 容器镜像的构建2.3.2 **构建镜像流程**2.3.3 **应用场景**2.3.4 镜像仓库的应用 2.4 容器镜像的优…

LabVIEW实现油浸式变压器自主监测与实时报告

油浸式变压器广泛应用于电力系统中&#xff0c;尤其是在电力传输和分配领域。为了确保变压器的安全、稳定运行&#xff0c;及时监测其工作状态至关重要。传统的变压器监测方法通常依赖人工巡检和定期检查&#xff0c;但这不能及时发现潜在的故障隐患&#xff0c;且效率较低。随…

【2025最新】国内中文版 ChatGPT镜像网站整理合集,GPT最新模型4o1,4o,4o-mini分类区别,镜像站是什么

1.快速导航 原生中转型镜像站点 立即Chat支持GPT4、4o以及o1,canvs等&#xff0c;同步官网功能 AIChat.com 支持最新4O 2.两者对比 官网立即Chat访问难度需要魔法直接访问支付手段国际支付国内支付封禁策略检测节点&#xff0c;随时封禁不会封禁价格每月140元订阅费用每年70元…

SpringBoot:RestTemplate与IllegalArgumentException

问题描述 在SpringBoot应用中&#xff0c;有时会遇到使用RestTemplate调用第三方服务的场景。例如&#xff1a;在进行地名数据采集时&#xff0c;为了拿到地名对应的经纬度位置&#xff0c;通常会有地理编码的步骤&#xff0c;此时就可能涉及到调用第三方接口服务实现此需求。 …

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础&#xff0c;提供集中日志记录和分析&#xff0c;以及端到端可见性。因此&#xff0c;分析师可以更有效地管理安全状态&#xff0c;将安全流程自动化&#xff0c;并快速响应威胁。具有分析和自动化功能的集成…

HTML中如何保留字符串的空白符和换行符号的效果

有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} &#xff0c; HTML中想要保留 \n的换行效果的有下面3种方法&#xff1a; 1、style 中 设置 white-space: pre-lin…

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库 基本信息数据库配置设置密码控制台开…

基于预共享密钥的IPsec实验

一、实验目的 &#xff08;1&#xff09;了解IPsec的原理和协议运行机制&#xff1b; &#xff08;2&#xff09;掌握IPsec身份认证的预共享密钥的配置&#xff1b; &#xff08;3&#xff09;掌握用Wireshark工具抓包分析IPsec数据包格式和协议流程。 二、实验设备与环境 &…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

初学stm32 --- flash模仿eeprom

目录 STM32内部FLASH简介 内部FLASH构成&#xff08;F1&#xff09; FLASH读写过程&#xff08;F1&#xff09; 闪存的读取 闪存的写入 内部FLASH构成&#xff08;F4 / F7 / H7&#xff09; FLASH读写过程&#xff08;F4 / F7 / H7&#xff09; 闪存的读取 闪存的写入 …

Kinova仿生机械臂Gen3搭载BOTA 力矩传感器SeneOne:彰显机器人触觉 AI 与六维力传感的融合力量

随着工业4.0时代的到来&#xff0c;自动化和智能化成为制造业的趋势。机器人作为实现这一趋势的重要工具&#xff0c;其性能和智能水平直接影响到生产效率和产品质量。然而&#xff0c;传统的机器人系统在应对复杂任务时往往缺乏足够的灵活性和适应性。为了解决这一问题&#x…

浅谈计算机网络03 | 现代网络组成

现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…

电子画册制作平台哪个好?

​作为一个热爱分享的人&#xff0c;我试过了好几个平台&#xff0c;终于找到了几款比较好用得电子杂志制作平台&#xff0c;都是操作界面很简洁&#xff0c;上手非常快的工具。 FLBOOK:这是一款在线制作H5电子画册软件&#xff0c;提供了各种类型的模板&#xff0c;可支持添加…