写点什么

YashanDB 配置资源管理

作者:YashanDB
  • 2025-03-19
    广东
  • 本文字数:4365 字

    阅读完需:约 14 分钟

YashanDB 资源管理通过内置高级包DBMS_RESOURCE_MANAGER和相关配置参数提供对物理资源的配置能力。

启用资源管理

创建资源使用组

调用DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP 创建资源使用组。

-- 创建名为LOW_GROUP和HIGH_GROUP的资源使用组,只有SYS用户才有权限执行EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('LOW_GROUP','CONSUMER GROUP WITH LOW RESOURCE');EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('HIGH_GROUP','CONSUMER GROUP WITH HIGH RESOURCE');
复制代码


创建资源计划

调用DBMS_RESOURCE_MANAGER.CREATE_PLAN 创建资源计划。

-- 创建名为RESPLAN的资源计划,只有SYS用户才有权限执行EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN('RESPLAN','PLAN FOR RESOURCE TEST');
复制代码


创建资源计划指令

调用DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE 创建资源计划指令。

-- 在RESPLAN资源计划下,为LOW_GROUP资源使用组创建计划指令,该计划指令指定CPU共享份额为50,最大使用上限为10%,用户内存使用上限为20%,会话使用上限为5%EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('RESPLAN', 'LOW_GROUP', SHARES => 50, UTILIZATION_LIMIT => 10, SPA_LIMIT => 20, SESSION_SPA_LIMIT => 5);
-- 在RESPLAN资源计划下,为HIGH_GROUP资源使用组创建计划指令,该计划指令指定CPU共享份额为100,最大使用上限为100%,用户内存使用上限为50%,会话使用上限为10%,资源使用组中50%的用户内存预留给每个会话EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('RESPLAN', 'HIGH_GROUP', SHARES => 100, UTILIZATION_LIMIT => 100, SPA_LIMIT => 50, SESSION_SPA_LIMIT => 10, SPA_LIMIT_RESERVED => 50);
复制代码


创建用户映射关系

调用DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING 创建用户映射关系。

如果对应用户不存在,请先创建用户,具体操作请查阅创建用户

-- 将用户RESMAN1映射到LOW_GROUP资源使用组和用户RESMAN2映射到HIGH_GROUP资源使用组,只有SYS用户才有权限执行EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RESMAN1','LOW_GROUP');EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RESMAN2','HIGH_GROUP');
复制代码


修改相关配置参数

  1. 通过 yasboot 工具修改RESOURCE_MANAGER_PLAN参数,以激活资源计划 RESPLAN。

# -r参数表示修改失败后回滚集群参数$ yasboot cluster config set -c yashandb -k RESOURCE_MANAGER_PLAN -v RESPLAN -d -r
# 可通过如下命令查看RESOURCE_MANAGER_PLAN参数是否已生效于所有节点$ yasboot cluster config show -c yashandb -q RESOURCE_MANAGER_PLAN
复制代码


Note:

RESOURCE_MANAGER_PLAN参数只允许使用yasboot cluster config set命令修改。

  1. 连接数据库,检查资源计划是否成功激活,RESOURCE_MANAGER_PLAN参数值为 RESPLAN 表示成功激活资源计划。

show parameter RESOURCE_MANAGER_PLAN;
NAME VALUE---------------------------------------------------------------- ----------------------------------------------------------------RESOURCE_MANAGER_PLAN RESPLAN
复制代码


  1. 通过 yasboot 工具修改RSRC_MODE参数开启内存(MEM)或 CPU 资源管理功能,随后重启数据库使之生效。

# 修改RSRC_MODE参数为ALL,表示同时启用CPU和内存资源管理功能$ yasboot cluster config set -c yashandb -k RSRC_MODE -v ALL -d$ yasboot cluster restart -c yashandb# 可通过如下命令查看RSRC_MODE参数于所有节点中修改结果$ yasboot cluster config show -c yashandb -q RSRC_MODE
复制代码


Note:

RSRC_MODE参数只允许使用yasboot cluster config set命令修改。

  1. 重启后连接数据库,检查资源管理功能是否成功开启,RSRC_MODE参数值为 ALL 表示已成功开启。

show parameter RSRC_MODE;
NAME VALUE---------------------------------------------------------------- ----------------------------------------------------------------RSRC_MODE ALL
复制代码


通过上述示例成功开启资源管理功能后,使用 RESMAN1 用户连接数据库时会受到资源使用组 LOW_GROUP 在资源计划 RESPLAN 下的指令约束。

修改映射关系

如需更改某个用户映射的资源使用组,需先确保新的资源使用组已存在。下述语句仅为示例,具体参数请查阅DBMS_RESOURCE_MANAGER相关介绍。

-- 将RESMAN1映射至HIGH_GROUP组中EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RESMAN1','HIGH_GROUP');
复制代码


修改映射关系后,用户新建的会话会归属于新的资源使用组,但已在使用中的会话会继续归属于原有资源使用组直至结束会话。

配置 Cgroups

使用 CPU 资源管理前,需要先配置 Cgroups。

Cgroups 介绍

Cgroups(Control Groups)是 Linux 内核提供的一种机制,将一系列的任务及其子任务进行集合(或划分)到不同的分组内,并以此限制、记录和隔离不同分组的资源使用情况。

Cgroups 创建

场景一:暂未安装 YashanDB
  1. YashanDB单机部署YashanDB分布式部署Step1:生成部署文件中,增加--create-cgroup选项,用于创建 cgroup 目录。

  2. 执行如下命令,生成具备 CPU 资源管理功能的部署文件。

# 单机$ yasboot package se gen --cluster yashandb -u yashan -p password --ip 192.168.1.2 --port 22 --install-path /data/yashan/yasdb_home  --data-path /data/yashan/yasdb_data --begin-port 1688 --create-cgroup --sudo-username yashan --sudo-password password# 分布式$ yasboot package de gen --cluster yashandb -u yashan -p password --ip 192.168.1.2 --port 22 --install-path /data/yashan/yasdb_home  --data-path /data/yashan/yasdb_data --begin-port 1688 --create-cgroup --sudo-username yashan --sudo-password password
复制代码


部署完成后,会自动在/etc/rc.local 文件中增加一行命令,以便在数据库启动后启用 CPU 资源管理功能。

场景二:已安装 YashanDB

通过 yasboot 工具的host cgroup create命令创建 cgroup 目录,详细参数说明请查阅yasboot host

$ yasboot host cgroup create --cluster yashandb --sudo-username yashan --sudo-password ssh密码
复制代码


命令执行完成后需重启数据库才能启用 CPU 资源管理功能。

监控资源使用

监控 CPU 资源使用

YashanDB 提供动态视图V$CPUSTATDV$CPUSTATGV$CPUSTAT监控集群上资源使用组的 CPU 使用情况。

-- 监控资源使用组LOW_GROUP在所有节点上的CPU使用情况SELECT RESNAME, NR_THROTTLED, THROTTLED_TIME FROM DV$CPUSTAT WHERE RESNAME = 'LOW_GROUP';
复制代码


监控 SPA 内存资源使用

YashanDB 提供动态视图监控资源使用组和会话的 SPA 内存使用情况。

监控资源使用组的 SPA 内存使用

YashanDB 提供动态视图V$RSRC_CONSUMER_GROUPDV$RSRC_CONSUMER_GROUPGV$RSRC_CONSUMER_GROUP监控集群上资源使用组的 SPA 内存使用情况。

-- 监控资源使用组HIGH_GOUP在所有节点上的SPA内存使用情况SELECT SPA_LIMIT_QUOTA, SESSION_SPA_LIMIT_QUOTA, SPA_REMAIN_QUOTA, SPA_MAX_USE_QUOTA, SESSION_SPA_RESERVED_QUOTA, SPA_LIMIT_EXCEED_TIMES, SESSION_SPA_LIMIT_EXCEED_TIMES FROM DV$RSRC_CONSUMER_GROUP WHERE NAME = 'HIGH_GROUP';
复制代码


监控会话的 SPA 内存使用

YashanDB 提供动态视图V$SESSION_SPADV$SESSION_SPAGV$SESSION_SPA监控集群上会话的 SPA 内存使用情况。

-- 监控当前会话的SPA内存使用SELECT B.*, A.SPA_USE_MEM, A.SPA_USE_QUOTA, A.RESOURCE_CONSUMER_GROUP FROM V$SESSION A, V$SESSION_SPA B WHERE A.SID = B.SID AND B.SID = USERENV('SID');
复制代码


监控执行重试

分布式部署形态下,可以通过如下语句监控执行的重试情况。

-- 监控分布式集群下语句的执行重试情况SELECT GROUP_ID,GROUP_NODE_ID,SID,GLOBAL_SESSION_ID,SERIAL#,SPA_USE_MEM,SPA_USE_QUOTA,SPA_MAX_USE_MEM,RESOURCE_CONSUMER_GROUP,EXEC_START_TIME,RETRY_CNT,RETRY_INFO,EXEC_STATUS FROM DV$SESSION WHERE TYPE='USER';
复制代码


监控并行执行资源使用

YashanDB 提供动态视图V$PX_RES_MGRDV$PX_RES_MGRGV$PX_RES_MGR监控集群上资源使用组的并行执行资源使用情况。

-- 监控资源使用组HIGH_GROUP在所有节点上的并行执行资源使用情况SELECT GROUP_ID, GROUP_NODE_ID, PX_RES_TYPE, MAX_PX_RES_USAGE, CURR_PX_RES_USAGE FROM DV$PX_RES_MGR WHERE CONSUMER_GROUP = 'HIGH_GROUP'
复制代码


关闭资源管理

关闭资源管理需要按步骤进行:

  • 如需删除资源使用组,需先删除该资源使用组相关的映射关系和资源计划指令,否则返回错误。

  • 如需删除资源计划,需确保该资源计划不是生效计划且先删除关联到该资源计划的所有资源计划指令,否则返回错误。

修改相关配置参数

  1. 通过 yasboot 工具修改RESOURCE_MANAGER_PLAN参数失效所有资源计划。

$ yasboot cluster config set -c yashandb -k RESOURCE_MANAGER_PLAN -v '' -d -r# 可通过如下命令查看RSRC_MODE参数于所有节点中的修改结果$ yasboot cluster config show -c yashandb -q RESOURCE_MANAGER_PLAN
复制代码


  1. 通过 yasboot 工具修改RSRC_MODE参数关闭资源管理功能并重启数据库,待数据库重启后生效。

$ yasboot cluster config set -c yashandb -k RSRC_MODE -v NONE -d$ yasboot cluster restart -c yashandb# 可通过如下命令查看RSRC_MODE参数于所有节点中的修改结果$ yasboot cluster config show -c yashandb -q RSRC_MODE
复制代码


删除用户映射关系

调用DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING 删除用户映射关系。

Note

  • 删除用户时,该用户的映射关系会被删除。

  • 删除某个用户的映射关系时,该用户会被自动映射至 DEFAULT_CONSUMER_GROUP 组中。

  • 无法删除系统用户 SYS 的映射关系。

EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING('USER','RESMAN1');EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING('USER','RESMAN2');
复制代码


删除资源计划指令

调用DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE 删除资源计划指令。

EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE('RESPLAN','LOW_GROUP');EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE('RESPLAN','HIGH_GROUP');
复制代码


删除资源计划

调用DBMS_RESOURCE_MANAGER.DELETE_PLAN 删除资源计划。

如果资源计划仍有其它资源计划指令,将返回错误。

EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN('RESPLAN');
复制代码


删除资源使用组

调用DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP 删除资源使用组。

如果资源使用组仍有其它资源使用者,将返回错误。

EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP('LOW_GROUP');EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP('HIGH_GROUP');
复制代码


发布于: 刚刚阅读数: 3
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB配置资源管理_数据库_YashanDB_InfoQ写作社区