计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

多租户管理与资源隔离

更新时间:2025-02-12 GMT+08:00

本文介绍了TaurusDB提供的多租户数据隔离以及资源隔离的相关语法和使用说明。

功能简介

TaurusDB提供的多租户管理功能,让数据库能够为其多个租户服务,提高数据库资源利用率。租户间实现数据隔离,不同租户能访问自己的数据。支持租户级资源隔离和用户级资源隔离,资源隔离能够避免浪费和性能扰邻。支持资源动态调整,能够及时应对不同租户或用户的业务高峰和波谷。

多租户管理功能的原理图如下:

图1 多租户管理原理图

常用概念

表1所示为租户级和用户级的相关术语。

表1 租户级和用户级相关术语

所属层级

相关术语

租户级

租户(Tenant):租户的层级结构在数据库实例之下,在数据库与用户之上。租户是为了数据隔离、资源隔离提出的概念,实际访问数据库还是需要以用户的身份去访问。

资源配置(resource_config:为实现租户级资源隔离所提出的概念,一个resource_config描述了对应租户下能够使用的资源。当前仅支持通过设置min_cpu和max_cpu实现对CPU资源上下限进行配置,内置以下资源配置:

  • RDS_SYS_CONFIG:系统租户对应的资源配置,min_cpu默认为0.1(单位:CPU核数),max_cpu默认为实例规格的CPU核数。
  • shared_tenants_config:共享租户对应的资源配置,min_cpu固定为0,max_cpu默认为实例规格的CPU核数。

租户按照数据隔离的维度将租户分为系统租户和普通租户。

系统租户(sys_tenant):系统租户是为了适配原有模式下用户的使用,原有数据库实例中的用户默认属于系统租户,也可以称为系统用户。当通过系统租户下的用户连接数据库时,若该用户拥有对应的数据库实例访问权限,即可访问所有租户下的数据库。

普通租户(user_tenant):普通租户需要在系统租户下进行创建,普通租户下的数据库实例与用户完全隔离,无法互相访问,并且普通租户无法访问系统租户下的数据库。

租户可使用的资源由租户级资源配置(当前仅支持CPU资源)确定,按照资源隔离的维度又可以将租户分为独占型租户和共享型租户。

独占型租户:租户关联的资源配置中的min_cpu>0,需要保证在任何时刻该租户的CPU核数不小于min_cpu。

共享型租户:关联到特定的资源配置shared_tenants_config的租户,此资源配置的min_cpu=0。系统优先保证独占租户的资源请求,然后将剩余资源配给共享租户。同时,系统保留一部分CPU资源(由参数mt_shared_cpu_reserved进行配置)给共享租户,保证共享租户在CPU争抢时不会出现无法获取到资源的情况。独占型租户和共享型租户可以通过修改关联的资源配置进行相互转换。

用户级

用户的层级结构在数据库实例和租户之下,同一个租户可以拥有多个用户。多租户功能没有修改用户间的数据隔离,只增加了用户级的资源管理机制。

图2 用户级资源配置关系图

资源消费组(consumer_group)

多个用户可以归属到同一个资源消费组,这些用户共享资源消费组所关联的资源。

资源计划指令(plan_directive)

资源计划指令描述了一个资源消费组具体的资源配置情况,一个资源计划指令唯一对应一个资源消费组;一个资源消费组可以关联多个资源计划指令,其中至多只允许启用一个资源计划指令,为实现此功能,引入下述的资源计划的概念。

资源计划(plan)

用于控制资源计划指令的启用或禁用。一个资源计划关联一个或多个资源计划指令。启用或禁用资源计划可使对应的资源计划指令生效或失效,同一个租户内至多只能启用一个资源计划。

使用须知

  • 多租户管理与资源隔离功能支持租户级数据隔离、租户级CPU资源隔离、用户级CPU资源隔离。
  • 多租户管理与资源隔离功能需要TaurusDB实例内核版本为2.0.57.240900及以上。
  • 开启多租户管理与资源隔离前必须开启thread pool功能。
  • 开启多租户管理与资源隔离功能前,要求实例中的数据库名称、用户名称、表空间名称不能包含@字符。
  • Serverless不支持多租户管理与资源隔离功能。
  • 若TaurusDB实例内核版本2.0.60.241200及其以上,新增的多租视图(包括MT_RESOURCE_CONFIG、MT_TENANT、MT_TENANT_DB、MT_RESOURCE_PLAN、MT_CONSUMER_GROUP、MT_GROUP_MAPPING_RULE、MT_PLAN_DIRECTIVE)将代替旧版本的多租视图DBA_RSRC_*提供服务。
  • Binlog:

    目前Binlog没有实现租户隔离,如果允许普通租户拉取Binlog会破坏租户间数据隔离,因此当前禁止普通租户下的用户拉取Binlog。

  • 数据库代理:

    因HTAP标准版和轻量版不支持带@字符的数据库,普通租户下的数据库迁移到该类HTAP引擎时会更改目标端库名,但数据库代理的自动行存/列存引流功能要求源端和目标端的库名一致,因此普通租户创建的数据库将无法使用数据库代理的自动行存/列存引流功能。

  • 备份恢复:

    恢复已打开过多租开关的多租实例数据到新实例,未开启多租开关下,新实例不支持创建带@的用户、数据库和表空间。

  • 升降级:
    • 如果实例中的多租开关打开,且TaurusDB实例内核版本为2.0.60.241200及其以上,存在需要降级到2.0.60.241200之前的版本的场景。降级成功后,需要再次重启实例,多租功能才能恢复可用,否则降级后的多租开关将变更为关闭。
    • 如果TaurusDB实例内核版本为2.0.60.241200及其以上,存在需要降级到2.0.60.241200之前的版本的场景。降级成功后,在information_schema下执行show tables等可能会依然会显示新增的多租视图(包括MT_RESOURCE_CONFIG、MT_TENANT、MT_TENANT_DB、MT_RESOURCE_PLAN、MT_CONSUMER_GROUP、MT_GROUP_MAPPING_RULE、MT_PLAN_DIRECTIVE),但无法访问。如需清除残留的多租视图元数据,需要手动重启实例。
    • 如果TaurusDB实例内核升级到2.0.60.241200版本及以后,在information_schema下执行show tables命令,可能无法正常显示新增的多租视图。但不影响多租视图的访问,如需显示,需要手动重启实例。
  • 兼容性:
    • 先开启后关闭多租开关,创建数据库、用户和表空间时,名称中不能包含@字符。
    • 普通租户下,数据库名称最大长度由64降低为50,用户名称最大长度由32降低为20。
    • 系统库mysql、sys暂不开放给普通租户。
    • 普通租户下,系统库performance_schema里的表使用用户名或库名做条件查询时,需要使用模糊搜索。
    • 系统租户的root用户可以kill其他用户的session;普通租户的用户,只能kill当前用户的session。
    • 多租实例不支持全文索引。

开启多租户模式

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 在页面左上角单击,选择数据库 > 云数据库 TaurusDB
  4. 在实例管理页面,单击目标实例名称,进入实例概览页面。
  5. 在实例信息区域,单击多租户隔离右侧,在弹框中单击“确认”,开启多租户隔离功能。

    开启多租户隔离前要求存量的数据库名称、用户名称以及表空间名称不能包含@字符,否则会开启失败。

资源管理

资源配置(resource_config)和租户是一对多的关系,当某一租户绑定此资源配置时便可限制此租户下用户使用的CPU资源。

  • 创建资源配置
    CREATE resource_config config_name MAX_CPU [=] {max_cpu_value} [MIN_CPU [=] {min_cpu_value}];
  • 更新资源配置
    ALTER resource_config config_name MAX_CPU [=] {max_cpu_value} [MIN_CPU [=] {min_cpu_value}];
  • 删除资源配置
    DROP resource_config config_name;
  • 查看资源配置
    SELECT * FROM information_schema.DBA_RSRC_TENANT_RESOURCE_CONFIGS;
说明:
  • 仅在高权限root用户下可使用。
  • 参数说明:
    • config_name: 资源配置名称。最大长度为64,仅支持包含大写字母、小写字母、数字或下划线。
    • MAX_CPU:绑定该资源配置的租户能够使用的最大CPU资源,单位为核数,最小值为0.1,最大值为实例规格中的CPU核数,可查看变量mt_flavor_cpu获取。粒度0.1。
    • MIN_CPU:在CPU资源争抢时,承诺分配给绑定该资源配置的租户的CPU资源,单位为核数,为可选项。默认等于MAX_CPU,最小值为0.1,最大值不超过MAX_CPU。粒度为0.1。(注意:shared_tenants_config为系统内置的资源配置,其MIN_CPU为0)。承诺分配给租户的CPU资源遵循按需分配策略,不会预留,例如:承诺给租户分配1U,但如果租户业务空闲,只会使用0.3U,则剩余的0.7U会按需分配给其他租户。
  • 更新resource_config时,如果该resource_config已经绑定租户,且更新后MIN_CPU值大于原有的MIN_CPU值,则需要校验修改后的值是否满足资源约束,否则不做资源约束校验。
  • 删除resource_config时,若租户正在使用该资源配置,则无法进行删除操作。
  • CPU争抢时,租户间资源分配会尽量按照租户的MIN_CPU分配资源,但存在一定的误差,误差通常在1U以内。
  • 各租户下的实例的读写性能峰值并非和分配到的CPU资源呈线性关系。例如16U的实例分配给2个租户的MAX_CPU均为8U,那么两个租户同时满载跑业务的总共的TPS将达不到8U实例的2倍。即租户下的实例性能可能比同等规格的非多租实例的性能稍低。

租户管理

创建租户时,需要绑定已经创建的资源配置(resource_config),以此限制该租户下用户使用的CPU资源。

  • 创建租户
    CREATE TENANT tenant_name RESOURCE_CONFIG config_name [COMMENT [=] 'comment_string'];
  • 更改租户
    ALTER TENANT tenant_name RESOURCE_CONFIG config_name [COMMENT [=] 'comment_string'];
  • 删除租户
    DROP TENANT tenant_name;
  • 查看租户
    SELECT * FROM information_schema.DBA_RSRC_TENANT;
说明:
  • 仅在高权限root用户下可使用。
  • 创建租户
    • tenant_name长度不超过10个字符,仅支持包含小写字母、数字或下划线_。
    • 创建租户会进行资源约束检查,需要保证所有租户的资源配置中MIN_CPU之和满足资源约束。
    • 如果租户绑定shared_tenants_config,则租户成为共享租户,否则是独占租户。当发生资源争抢时,优先满足独占租户的MIN_CPU承诺资源需求,剩余的资源再由共享租户和独占租户争抢。
    • 租户间资源充分利用。

      例如8U实例,分配给租户A的MIN_CPU是3U,MAX_CPU是8U。分配给租户B的MIN_CPU是5U,MAX_CPU是8U。当租户A没有负载情况下,租户B可以使用到8U。如果租户A负载1U,则租户B可使用7U。

  • 更改租户resource_config
    • 如果新绑定的resource_config的MIN_CPU值大于等于原有resource_config的MIN_CPU值时,会进行资源约束检查,需要保证所有租户的资源配置中MIN_CPU之和满足资源约束。
    • 如果独占租户新绑定到shared_tenants_config,则成为共享租户,将同时删除租户下的用户级资源隔离相关的配置。
  • 删除租户
    • 需要保证租户下的DB和用户已经被删除,否则,无法删除租户。
    • 删除租户的同时将删除租户关联的用户级资源隔离相关的配置。

用户管理

开启多租模式后,用户分为系统租户下的用户和普通租户下的用户。存量的用户均属于系统租户,新创的用户根据接口语义属于系统租户或者普通租户。

  • 在系统租户下管理用户

    创建用户

    创建系统租户下的用户:

    CREATE user [IF NOT EXISTS] user_name@'host';

    创建普通租户下的用户:

    CREATE user [IF NOT EXISTS] 'user_name@tenant_name'@'host'; 

    重命名用户

    重命名系统租户下的用户:

    RENAME USER user_from@host1 TO user_to@'host'; 

    重命名普通租户下的用户:

    RENAME USER 'user_from@tenant_name'@host1 TO 'user_to@tenant_name'@'host'; 

    删除用户

    删除系统租户下的用户:

    DROP USER [IF EXISTS] user_name@'host'; 

    删除普通租户下的用户:

    DROP USER [IF EXISTS] 'user_name@tenant_name'@'host';

    授权用户

    为用户'user_1@tenant_1'@'%'授予租户tenant_1下的priv_type权限:

    GRANT priv_type ON *.* to 'user_1@tenant_1'@'%' with grant option;

    查看权限:

    SHOW grants for 'user_1@tenant_1'@'%';
  • 在普通租户下管理用户

    创建用户

    创建当前租户下的用户:

    CREATE user [IF NOT EXISTS] user_name@'host'; 

    重命名用户

    RENAME USER user_from@host1 TO user_to@'host';

    删除用户

    DROP USER [IF EXISTS] user_name@'host';

    授权用户

    为用户user1授予当前租户下的priv_type权限:

    GRANT priv_type ON *.* to 'user_1'@'%' with grant option;

    查看权限:

    SHOW grants for 'user_1';
说明:
  • 以系统租户身份创建或删除普通租户下的用户时,需要以user_name@tenant_name的方式对用户进行操作。
  • 普通租户下的用户名称的长度被限制为不超过20个字符。
  • 租户内不可以创建部分特殊用户:mysql.sys, mysql.session, mysql.infoschema以及参数rds_reserved_users中保留的用户。
  • 在系统租户下,对普通租户下的用户重命名时,需要保证user_from和user_to中的tenant_name相同,如不相同,则接口返错。
  • 多租户隔离特性关闭时,无法重命名普通租户下的用户。

数据库管理

数据库分为系统租户下的数据库和普通租户下的数据库。系统租户可以访问所有数据库,普通租户只能访问属于自己的数据库。

  • 在系统租户下管理数据库

    创建数据库

    创建系统租户的数据库:

    CREATE DATABASE [IF NOT EXISTS] `db_name`;

    创建普通租户的数据库:

    CREATE DATABASE [IF NOT EXISTS] `db_name@tanant_name`; 

    删除数据库

    删除系统租户的数据库:

    DROP DATABASE [IF EXISTS] `db_name`;

    删除普通租户的数据库:

    DROP DATABASE [IF EXISTS] `db_name@tanant_name`;
  • 在普通租户下管理数据库

    创建当前租户的数据库:

    CREATE DATABASE [IF NOT EXISTS] 'db_name'; 

    删除当前租户的数据库:

    DROP DATABASE [IF EXISTS] 'db_name';
说明:
  • 在系统租户下需要以db_name@tenant_name的方式对普通租户下的数据库进行操作。
  • 系统库SYS、MYSQL暂不允许普通租户访问。
  • 租户内不可以创建部分特殊DB:INFORMATION_SCHEMA, PERFORMANCE_SCHEMA, MYSQL, SYS, __recyclebin__。
  • 存量数据库分配租户

    为保证兼容性,升级或者迁移到多租实例后,存量的数据库默认属于系统租户,可以通过如下语法将存量的数据库分配给租户。此外,对于已经开启多租特性后,系统租户创建的且未分配给普通租户的数据库,也可通过如下语法分配数据库给对应租户。

    数据库分配

    将数据库分配给租户名为tenant_name的普通租户

    ALTER DATABASE db_name TENANT = `tenant_name`;

    将数据库回收到系统租户下

    ALTER DATABASE db_name TENANT = ``;

    查看映射关系

    SELECT * FROM information_schema.DBA_RSRC_TENANT_DB;
    说明:
    • 仅在高权限root用户下可使用。
    • 如果数据库是开启多租后创建的,以db_name@tenant_name格式命名的数据库不允许分配调用此接口,接口会返错。
    • 如果tenant不存在,且不为空,接口返错。
  • 通过租户下的用户连接数据库

    在系统租户下,原有连接方式不变。

    在普通租户下,指定用户时,需要以user_name@tenant_name的形式;指定数据库时,支持db_name和db_name@tenant_name两种形式。

    mysql --host=**** -u user1@tenant_1 -D db1 -p password;
    mysql --host=**** -u user1@tenant_1 -D db1@tenant_1 -p password;

    连接成功后,该用户将受到对应租户下的资源限制。

表空间管理

当前实现了通用表空间GENERAL TABLESPACE的租户间隔离,其中TABLESPACE分为系统租户下的TABLESPACE和普通租户下的TABLESPACE。系统租户可以访问所有TABLESPACE,普通租户只能访问属于自己的TABLESPACE。在升级和迁移场景下,存量的TABLESPACE不做改动,统一归属于系统租户的TABLESPACE。

  • 在系统租户下管理表空间
    • 创建表空间

      创建系统租户的表空间

      CREATE TABLESPACE `tablespace_name`;
      CREATE TABLESPACE `tablespace_name` add datafile `tablespace_file_name.ibd`;

      创建普通租户的表空间

      CREATE TABLESPACE `tablespace_name@tenant_name`;
      CREATE TABLESPACE `tablespace_name@tenant_name` add datafile `tablespace_file_name.ibd`;
    • 删除表空间

      删除系统租户的表空间

      DROP TABLESPACE `tablespace_name`;

      删除普通租户的表空间

      DROP TABLESPACE `tablespace_name@tenant_name`;
    • 重命名表空间

      重命名系统租户的表空间

      ALTER TABLESPACE `tablespace_name` RENAME TO `tablespace_name`;

      重命名普通租户的表空间

      ALTER TABLESPACE ` tablespace_name@tenant_name ` RENAME TO `new_tablespace_name@tenant_name`;
    • 表空间与表绑定

      创建系统租户下的表,并与指定TABLESPACE关联

      CREATE TABLE table_name … TABLESPACE [=] `tablespace_name`;

      创建普通租户下的表,并与指定TABLESPACE关联

      CREATE TABLE table_name … TABLESPACE [=] `tablespace_name@tenant_name`;

      将系统租户下的存量表与指定TABLESPACE关联

      ALTER TABLE table_name TABLESPACE `tablespace_name`;

      将普通租户下的存量表到指定TABLESPACE关联

      ALTER TABLE table_name TABLESPACE `tablespace_name@tenant_name`;
  • 在普通租户下管理表空间
    • 创建当前租户的表空间
      CREATE TABLESPACE `tablespace_name`;
    • 删除当前租户的表空间
      DROP TABLESPACE `tablespace_name`;
    • 重命名当前租户的表空间
      ALTER TABLESPACE `tablespace_name` RENAME TO ` tablespace_name `;
    • 创建当前租户的表,并与指定TABLESPACE关联
      CREATE TABLE table_name … TABLESPACE [=] tablespace_name;
    • 将当前租户的存量表与指定TABLESPACE关联
      ALTER TABLE table_name TABLESPACE `tablespace_name`;
      说明:
      • 启用多租开关后,tablespace名称的最大长度由64降低到50,且不能包含`@`字符。
      • 特殊的tablespace无法被创建,如以`innodb_`开头的tablespace无法被创建。
      • 若某个租户创建的tablespace的datafile与自己或者其他租户创建的tablespace的datafile相同,那么这个租户此次创建的tablespace会失败。
      • 在系统租户下将普通租户的表与tablespace进行绑定,若新的tablespace的名字以innodb_开头,说明此tablespace为系统tablespace,此时tablespace_name不用带上@tenant_name。
      • 在系统租户下将普通租户的表与普通租户的tablespace进行绑定, 需要表和tablespace属于同一个tenant。

用户级资源配置

租户下的用户默认共享当前租户的资源,若要进行用户级资源限制,请使用本节提供的用户级资源配置接口。

注意:

共享租户无法进行用户级资源配置。

  • 资源消费组(consumer_group)管理

    多个用户可以归属到同一个资源消费组(consumer_group),这些用户共享资源消费组所关联的资源,通过租户下的用户连接数据库,进行资源消费组管理。

    创建消费组

    dbms_resource_manager.create_consumer_group (
       consumer_group     CHAR(128),
       comment            CHAR(2000));
    说明:
    • consumer_group:资源消费组名称,仅支持包含大写字母、小写字母、数字或下划线。
    • comment:资源消费组说明,可为''。

    添加用户到资源消费组/从资源消费组中移除用户

    dbms_resource_manager.set_consumer_group_mapping ( 
       attribute        CHAR(128),  
       value            varbinary(128),  
       consumer_group   CHAR(128));
    说明:
    • attribute:要添加或修改的映射属性,当前版本仅支持USER。
    • value:要添加或修改的映射属性,当前版本仅支持用户名。
    • consumer_group:资源消费组名称,当参数不为空时将用户添加到资源消费组,当参数为空('')时,将用户从所在的资源消费组中移除。

    删除消费组

    dbms_resource_manager.delete_consumer_group (
        consumer_group   CHAR(128));
    说明:
    • consumer_group:资源消费组名称。
    • 删除consumer_group的时候会同步删除该资源消费组对应的plan_directive以及consumer_group_mapping。
    • 如果特性开关打开,删除用户时,会自动将用户从已关联的资源消费组中移除。当特性关闭时,删除用户时不会自动从已关联的资源消费组中移除,但不会有任何影响,当后续重新打开特性时,如果发现关联到资源消费组的用户已经被删除,会自动将这些用户从已关联的资源消费组中移除。
    • 如果特性开关打开,重命名用户时,不影响用户与资源消费组的关联关系。如果特性开关关闭后,删除用户,再创建同名用户,后续打开特性,该用户依然属于原有的资源消费组。

    查看资源消费组

    视图DBA_RSRC_CONSUMER_GROUPS记录了资源消费组信息。如果以系统租户下的用户身份下查看,则可以查询到所有租户的资源消费组信息,如果在普通租户下查看,只能看到当前租户下的资源消费组信息。

    select * from information_schema.DBA_RSRC_CONSUMER_GROUPS;

    查看资源消费组和用户的关联关系

    视图DBA_RSRC_GROUP_MAPPINGS记录了用户和资源消费组的关联关系。如果以系统租户下的用户身份下查看,则可以查询到所有租户的用户和资源消费组的关联关系,如果在普通租户下查看,只能看到当前租户下的用户和资源消费组的关联关系。

    select * from information_schema.DBA_RSRC_GROUP_MAPPINGS;

资源计划(plan)管理

资源计划(plan)用于控制资源计划指令(plan_directive)的启用或禁用。一个资源计划关联一个或多个资源计划指令。启用或禁用资源计划可使对应的资源计划指令生效或失效,同一个租户内至多只能启用一个资源计划。

  • 创建资源计划
    dbms_resource_manager.create_plan (
       plan_name         VARCHAR(128), 
       comment           VARCHAR(2000));
    说明:
    • plan_name:资源计划名称,仅支持包含大写字母、小写字母、数字或下划线。
    • comment:资源计划描述信息,可为''。
    • 若删除当前启用的资源计划,则会将当前启用的资源计划设置为空,同时删除对应的资源计划指令(plan_directive)。
    • plan默认可配置的最大数量为128,由参数mt_resource_plan_num控制。
  • 启用或禁用资源计划
    dbms_resource_manager.set_resource_manager_plan( 
        plan_name     VARCHAR(128));
    说明:
    • plan_name:资源计划名称。如果为空(''),则禁用资源计划。
  • 删除资源计划
    dbms_resource_manager.delete_plan (
        plan_name    VARCHAR(128));
    说明:
    • plan_name:资源计划名称。
    • 删除当前正在启用的资源计划,则会将当前启用的资源计划设置为空,同时删除所关联的资源计划指令(plan_directive)。
  • 查看资源计划

    视图DBA_RSRC_PLANS记录资源计划的详细信息。如果在系统租户下查看,则可以查询到所有租户的资源计划,如果在普通租户下查看,只能看到当前租户下的资源计划。

    SELECT * FROM information_schema.DBA_RSRC_PLANS;

资源计划指令(plan_directive)管理

资源计划指令描述了一个资源消费组具体的资源配置情况,一个资源计划指令唯一对应一个资源消费组;一个资源消费组可以关联多个资源计划指令,其中至多只允许启用一个资源计划指令,启用资源计划指令由上述启用资源计划实现。

  • 创建资源计划指令
    dbms_resource_manager.create_plan_directive (
       plan                    CHAR(128), 
       group_or_subplan        CHAR(128), 
       comment                 VARCHAR(2000), 
       mgmt_p1                 bigint(20),
       utilization_limit       bigint(20));
    说明:
    • plan:资源计划(plan)的名称。
    • group_or_subplan:资源消费组(consumer_group)的名称。
    • comment:资源计划指令的描述信息,可为''。
    • mgmt_p1:在CPU资源争抢的情况下,承诺分配给本资源消费组的CPU资源占所属租户总CPU资源的比例,取值范围[0, 100],表示使用所属租户100%的CPU。同一租户且同一个资源计划(plan)所关联的所有资源计划指令(plan_directive)的mgmt_p1总和不超过100。当租户内的各个资源消费组发生CPU争抢,优先保证承诺分配各个资源消费组CPU资源,剩余的CPU资源由各个资源消费组争抢。承诺分配给资源消费组的CPU资源也遵循按需分配策略,不会预留,例如:承诺给当前资源消费组20%的CPU资源,但当前资源消费组业务量较少,只需要5%的CPU资源,则剩余的15%的CPU资源会按需分配给其他资源消费组。
    • utilization_limit:资源消费组可用的CPU资源的上限占所属租户总CPU资源的比例,取值范围为 [1, 100]。表示最大可使用租户全部CPU资源,如果取值为70则表示最大可使用租户70%的CPU资源。
    • 同一资源消费组下的用户共享当前启用的资源计划指令配置的资源。例如:同一租户下的用户user1和user2都添加到资源消费组consumer_group1中,consumer_group1当前启用的资源计划指令的UTILIZATION_LIMIT为70,mgmt_p1为10,则user1和user2可使用的CPU资源总和最大为当前租户70%,CPU争抢时,保证user1和user2可获得的CPU资源总和为当前租户10%。
  • 更新资源计划指令
    dbms_resource_manager.update_plan_directive (
       plan                    CHAR(128), 
       group_or_subplan        CHAR(128), 
       new_comment             VARCHAR(2000), 
       new_mgmt_p1             bigint(20),
       new_utilization_limit   bigint(20));
    说明:
    • plan:资源计划(plan)的名称。
    • group_or_subplan:资源消费组(consumer_group)的名称。
    • comment:资源计划指令的描述信息,可为''。
    • mgmt_p1:在CPU资源争抢的情况下,承诺分配给本资源消费组的CPU资源占所属租户总CPU资源的比例,取值范围[0, 100],表示使用所属租户100%的CPU。同一租户且同一个资源计划(plan)所关联的所有资源计划指令(plan_directive)的mgmt_p1总和不超过100。当租户内的各个资源消费组发生CPU争抢,优先保证承诺分配各个资源消费组CPU资源,剩余的CPU资源由各个资源消费组争抢。承诺分配给资源消费组的CPU资源也遵循按需分配策略,不会预留,例如:承诺给当前资源消费组20%的CPU资源,但当前资源消费组业务量较少,只需要5%的CPU资源,则剩余的15%的CPU资源会按需分配给其他资源消费组。
    • utilization_limit:资源消费组可用的CPU资源的上限占所属租户总CPU资源的比例,取值范围为 [1, 100]。表示最大可使用租户全部CPU资源,如果取值为70则表示最大可使用租户 70%的CPU资源。
    • 同一资源消费组下的用户共享当前启用的资源计划指令配置的资源。例如:同一租户下的用户user1和user2都添加到资源消费组consumer_group1中,consumer_group1当前启用的资源计划指令的UTILIZATION_LIMIT为70,mgmt_p1为10,则user1和user2可使用的CPU资源总和最大为当前租户70%,CPU争抢时,保证user1和user2可获得的CPU资源总和为当前租户10%。
  • 删除资源计划指令
    dbms_resource_manager.delete_plan_directive (
        plan                   CHAR(128), 
        group_or_subplan       VARCHAR(128));
    说明:
    • plan:资源计划(plan)的名称。
    • group_or_subplan:资源消费组(consumer_group)的名称。
    • 删除正在启用的plan_directive, 将导致对应用户的资源配置失效。
  • 查看资源计划指令

    DBA_RSRC_PLAN_DIRECTIVES记录资源计划指令的详细信息。如果在系统租户下查看,则可以查询到所有租户的资源计划指令,如果在普通租户下查看,只能看到当前租户下的资源计划指令。

    SELECT * FROM information_schema.DBA_RSRC_PLAN_DIRECTIVES;

清空用户级配置

清空当前租户下所有的用户级资源配置相关的数据,包括资源消费组、资源计划,资源计划指令。在系统租户下执行,也只会清空系统租户下的用户级资源配置。
dbms_resource_manager.clear_all_configs();

CPU使用率统计

  • 用户级CPU使用率

    新增information_schema.cpu_summary_by_user视图,用于显示各个资源消费组的CPU使用信息,在系统租户下会显示所有租户的所有资源消费组的CPU使用信息,在普通租户下,只会显示当前租户的所有资源消费组的CPU使用信息,具体使用如下:

    SELECT * FROM information_schema.cpu_summary_by_user;
    说明:
    • 查询结果中的列名说明:

      TENANT_NAME:用户所属的租户名称。

      CONSUMER_GROUP:资源消费组名称。

      CPU_USAGE:资源消费组的CPU使用率,为使用的CPU占所在实例总CPU的比例。例如4U的实例中, 资源消费组实际用了2U, 那么CPU_USAGE为50%。

      CPU_USAGE_RELATIVE:资源消费组的CPU相对使用率,为使用的CPU占所在租户配置的MAX_CPU的比例。例如,当前租户的max_cpu为4U, 而资源消费组实际用了2U, 那么CPU_USAGE_RELATIVE为50%。

      INCLUDED_USERS:属于此资源消费组中的用户名。

    • 独占租户会创建一个默认的资源消费组default_group,租户下所有未绑定具体资源消费组的用户都会归属到default_group,default_group默认可使用租户的所有CPU资源,当租户内CPU争抢时,优先保证承诺分配给其他资源消费组的CPU资源,剩余的CPU资源分配给default_group。
  • 租户级CPU使用率

    新增information_schema.cpu_summary_by_tenant视图,用于显示各租户的CPU使用信息,在系统租户下会显示所有租户的CPU使用信息,在普通租户下,只会显示当前租户的CPU使用信息,具体使用如下:

    SELECT * FROM information_schema.cpu_summary_by_tenant;
    说明:
    • 查询结果中的列名说明:

      TENANT_NAME:租户名称。

      TENANT_TYPE:租户类型,exclusive表示独占租户,shared表示共享租户。

      CPU_USAGE:租户的CPU使用率,为使用的CPU占所在实例总CPU的比例。例如4U的实例中, 租户实际用了2U, 那么CPU_USAGE为50%。

      CPU_USAGE_RELATIVE:租户CPU相对使用率,为租户实际使用的CPU占配置的MAX_CPU的占比。例如,当前租户的max_cpu为4U, 而租户实际用了2U, 那么CPU_USAGE为50%。

    • 在满足所有独占租户MIN_CPU所配置的CPU资源后,所有的共享租户共享剩余的CPU资源,所以视图中所有的共享租户的CPU使用率一样,为所有共享租户的CPU使用率的总和。

DRS迁移

开启多租户管理与资源隔离功能后,DRS迁移可以迁移所有租户下的数据。

TaurusDB实例内核版本2.0.60.241200之前,DRS不会同步租户相关元数据,故租户信息不会被同步到目标端。如果需要迁移某个租户到另一个实例,需要遵循以下步骤:

  1. 目标端需要使用具备多租特性的实例,首先在目标端手动创建租户。
  2. 使用DRS数据同步功能创建库级同步任务(如果源端和目标端租户名有改动,则这里需要改动目标端库名)。

  3. 进行同步。

TaurusDB实例内核版本2.0.60.241200及以上,DRS迁移支持租户元数据跨实例迁移,可直接使用DRS数据同步功能创建库级同步任务后进行迁移。

注意:
  • 若源实例和目标实例多租开关状态不一致,会预检查失败。
  • 若源实例和目标实例多租开关打开,由于多租元数据表中存在初始化配置,会在预检查阶段上报提醒,告知用户__taurus_sys__库下存在非空表。用户可根据实际情况清理该库下非空表的内容。如果不清理,则会在DRS灾备同步过程中保留非空表中的数据,可能会造成多租功能无法使用。具体清理步骤如下:
    1. 清理普通租户下的用户,数据库以及表空间。示例如下:
      • 执行 select user,host from mysql.user where instr(user, '@') > 0,查询普通租户下是否仍有用户存在。如果存在普通租户下的用户,执行drop user 'user_name@tenant_name'@'%',删除对应用户。
      • 执行 select * from SCHEMATA where instr(SCHEMA_NAME, '@') > 0,查询普通租户下是否仍有db存在。如果存在普通租户下的db,执行drop user 'db_name@tenant_name'@'%',删除对应db。
      • 执行 select * from information_schema.MT_tenant_DB,查询普通租户下有哪些存量DB。执行 alter database 'db_name' tenant = ``,将db回收到系统租户下。
      • 执行 select * from information_schema.innodb_tablespaces where instr(NAME, '@') > 0,查询普通租户创建的tablespace,执行drop tablespace `tbs_name`,删除对应的表空间
    2. 删除普通租户(用户级资源配置会自动删除),删除对应的租户级资源配置。示例如下:
      • drop tenant `tenant_name`;
      • drop resource_config config_name;
    3. 删除系统租户下的用户级资源配置。示例如下:

      CALL dbms_resource_manager.clear_all_configs();

  • 源实例和目标实例的版本或规格不一致时,迁移成功后,源实例的资源配置不再适用目标实例。建议用户按照目标实例的规格,使用资源配置语法重新调整目标实例租户的资源配置。
  • DRS灾备同步场景,不支持使用目标实例IP+端口场景进行迁移。如果选择IP+端口模式,租户元数据将无法迁移到目标实例上。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容