#CPU资源管理

YashanDB CPU资源管理用于保证数据库在稳定运行的前提下,保障核心用户的使用和紧急任务的运行及最大限度提高CPU整体资源的利用率。

目前,YashanDB CPU资源管理支持于单机主备部署(非级联备)中使用,且适用于LINUX和ARM平台。 资源管理功能按节点生效,如果配置CPU资源上限20%,则每个节点可使用上限是20%。

开启CPU资源管理功能须执行如下两个步骤:

  1. 使用yasboot工具安装部署数据库并创建资源管理目录,yasboot工具详细参数说明请参考安装部署命令章节。
  2. 调用DBMS_RESOURCE_MANAGER高级包执行资源管理命令,高级包相关命令说明请参考DBMS_RESOURCE_MANAGER章节。

# 核心概念

# 资源使用组

资源使用组由许多用户会话组成,这些会话具有相同的资源使用请求。 其中 SYS_GROUP 和 DEFAULT_CONSUMER_GROUP 为系统创建的默认资源使用组。

新创建一个会话时,YashanDB根据设定会自动把它分配到DEFAULT_CONSUMER_GROUP组中,数据库管理员还可以手动调整某个会话所属的资源组。

# 资源计划指令

资源计划指令是对YashanDB数据库服务资源组合的描述,通过对数据库内部资源进行分配,并于数据库各节点上生效。

# 资源映射

资源映射指的是将用户映射到资源使用组,映射属性仅支持为USER。

Note:

  • 一个用户仅能映射到一个资源使用组中,但一个资源使用组可包含多个用户。
  • 一个资源使用组仅能对应一个资源计划指令,但一个资源计划指令可对应多个资源使用组。

# 操作步骤

# 开启资源管理

  1. 开启资源管理。

    安装YashanDB时开启

    CPU资源管理功能支持安装产品的同时开启,在YashanDB安装中的Step1:生成部署文件时,通过增加--create-cgroup选项创建资源管理的cgroup目录。

    如下为开启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
    

    在已安装的YashanDB上开启

    如需在已经部署成功的数据库上开启CPU资源管理功能,需通过yasboot工具的host cgroup create命令创建cgroup目录,详细参数说明参考一键开启命令章节。

    创建资源管理cgroup目录后,还需重启数据库,如下为详细操作步骤:

    # 创建集群所有主机的资源管理cgroup目录,其中yashandb为部署的集群名称,sudo-username须为具有sudo权限的ssh用户
    $ yasboot host cgroup create --cluster yashandb --sudo-username yashan --sudo-password ssh密码
    
    # 如果已经建立了资源组和资源指令,则需要重启数据库使得资源管理功能生效
    $ yasboot cluster restart --cluster yashandb
    
  2. 创建用户。

    CREATE USER RMUSER IDENTIFIED BY RMUSER DEFAULT TABLESPACE SYSTEM;
    GRANT dba TO RMUSER;
    
  3. 创建资源使用组。

    --创建名为RESMANGROUP的资源使用组,只有SYS用户才有权限执行
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('RESMANGROUP','');
    END;
    /
    
  4. 创建用户映射关系。

    --将用户RMUSER映射到RESMANGROUP资源使用组,只有SYS用户才有权限执行
    BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RMUSER','RESMANGROUP');
    END;
    /
    
  5. 创建资源计划指令。

    --创建名为RESMAN的资源计划指令,该指令表明RESMANGROUP资源使用组拥有11%的CPU共享资源和50%的CPU上限控制
    --同样只有SYS用户才有权限执行
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('RESMAN','RESMANGROUP',11,50);
    END;
    /
    
  6. 通过yasboot工具修改CGROUP_FLAG参数以开启资源管理功能并重启数据库,待数据库重启后生效。

    $ yasboot group config set -c yashandb -g 1 -k CGROUP_FLAG -v 1 -d
    $ yasboot cluster restart -c yashandb
    # 可通过如下命令查看CGROUP_FLAG参数于所有节点中修改结果
    $ yasboot group config show -c yashandb -g 1 -q CGROUP_FLAG
    

    Note:

    执行如上命令开启CPU资源管理功能之后,如果使用RMUSER用户连接至数据库,就会受到资源管理的限制。

  7. 连接数据库后通过CGROUP_ROOT_DIR参数查看当前节点cgroup安装路径,该路径默认位于/sys/fs/cgroup;通过CGROUP_FLAG参数查看当前节点资源管理功能是否开启,值为1表明资源管理功能开启。

    show parameter cgroup_root_dir;
    
    NAME                           VALUE                                           
    ------------------------------ --------------------------------------- 
    CGROUP_ROOT_DIR                /sys/fs/cgroup        
    
    show parameter cgroup_flag;
    
    NAME                                                             VALUE
    ---------------------------------------------------------------- ----------------------------------------------------------------
    CGROUP_FLAG                                                      1
    

# 修改映射关系

  1. 如需更改某个用户映射的资源使用组,有如下两种方式:

    1. 先删除原有的映射关系,再将该用户映射到新的资源使用组。

      --创建新资源使用组NEWGROUP
      BEGIN
      DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('NEWGROUP','');
      END;
      /
      
      --删除RMUSER用户原有的映射关系
      BEGIN
      DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING('USER','RMUSER');
      END;
      /
      
      --将RMUSER映射至NEWGROUP组中
      BEGIN
      DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RMUSER','NEWGROUP');
      END;
      /
      
    2. 先将用户映射到DEFAULT_CONSUMER_GROUP组中,再将该用户映射到新的资源使用组。

      --创建新资源使用组NEWGROUP2
      BEGIN
      DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('NEWGROUP2','');
      END;
      /
      
      --将RMUSER映射至DEFAULT_CONSUMER_GROUP组中
      BEGIN
      DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RMUSER','DEFAULT_CONSUMER_GROUP');
      END;
      /
      
      --将RMUSER映射至NEWGROUP2组中
      BEGIN
      DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('USER','RMUSER','NEWGROUP2');
      END;
      /
      

# 关闭资源管理

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

  1. 删除映射关系。

    如删除某个映射关系中映射的用户,该用户关联的映射关系均会删除。

    不支持删除SYS用户的映射关系。

    BEGIN
    DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING('USER','RMUSER');
    END;
    /
    
  2. 删除资源计划指令。

    BEGIN
    DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE('RESMAN','RESMANGROUP');
    END;
    /
    
  3. 删除资源使用组。

    如果资源使用组仍有其它用户进行映射,将返回错误。

    BEGIN
    DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP('RESMANGROUP');
    END;
    /
    
  4. 通过yasboot工具修改CGROUP_FLAG参数关闭资源管理功能并重启数据库,待数据库重启后生效。

    $ yasboot group config set -c yashandb -g 1 -k CGROUP_FLAG -v 0 -d
    $ yasboot cluster restart -c yashandb
    # 可通过如下命令查看CGROUP_FLAG参数于所有节点中的修改结果
    $ yasboot group config show -c yashandb -g 1 -q CGROUP_FLAG