关键字:
KingbaseES、用户资源限制、人大金仓
用户访问控制
kingbase可以配置用户的连接数以及账号使用期限。
- 用户连接数限制:
在创建用户的时候指定 CONNECTION LIMIT 参数设置用户连接数限制。如果用户有登录权限,此参数可以指定该用户能建立多少并发连接。-1(默认值)表示无限制。注意这个限制仅针对于普通连接,预备事务和后台工作者连接都不受这一限制管辖。
- 用户使用期限
在创建用户的时候指定 VALID UNTIL 参数设置用户使用期限, VALID UNTIL 机制设置一个日期和时间,在该时间点之后角色的口令将会失效。默认为不设置,口令将总是有效。
用户CPU限制
限制使用的CPU资源,KingbaseES中通过 kdb_resource_group 插件来实现用户限额功能,通过 sys_space_quota 函数实现用户表空间限额。
- 使用用户限额需要开启资源组
资源组依赖于操作系统的cgroup功能,所以必须安装cgroup并正确挂载和启动,对应的挂载的子系统目录给予操作用户写入和读取权限。
需要将动态库添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启数据库。
shared_preload_libraries = 'kdb_resource_group' # (change requires restart)
在 kingbase.conf 文件中设置参数,开启资源组功能,默认是off为关闭状态。
resource_group_activated = on
在 kingbase.conf 文件中扩展内的非必选参数,设置cgroup的挂载主目录,默认为'/sys/fs/cgroup',修改后需要重启数据库生效。
kdb_resource_group.resource_group_path = '/sys/fs/cgroup' #(change requires restart)
在 kingbase.conf 文件中扩展内的非必选参数,设置kingbase可使用操作系统CPU的总量,默认为100,取值范围1~100,修改后需要删除cgroup下的kingbase节点,命令如下:cgdelete -r cpu:kingbase。并重启数据库生效。
kdb_resource_group.resource_group_total_cpu = 100 #(change requires restart)
- 资源组管理
创建一个资源组
CREATE RESOURCE GROUP group_name WITH (resource_name = value);
group_name为创建的资源组名称, 一个数据库内唯一,该对象不属于某个模式下。 resource_name为设置控制资源类型的名称,目前支持cpu_shares和cpu_cfs_quota_us。 value为资源的值,为数字类型。 不同参数取值范围不同,非值域报错。
修改一个资源组的限制值
ALTER RESOURCE GROUP group_name SET (resource_name = value);
删除一个资源组
DROP RESOURCE GROUP group_name;
查看资源组信息
select * from sys_resgroup;
查看资源组资源值,通过系统表sys_resgroupcapability来查看资源组关联的相关值限制。 系统表 sys_resgroupcapability,任何用户都可以查询。
select * from sys_resgroupcapability;
设置一个资源组的相对CPU使用率
ALTER RESOURCE GROUP group_name SET (cpu_shares = value);
value 默认值: 10000 取值范围:10-10000
设置一个资源组的CPU绝对使用率限制
ALTER RESOURCE GROUP group_name SET (CFS_QUOTA_US = value);
value 默认值:100,不限制cpu使用 取值范围:整数,1-100。
- 资源组关联用户
ALTER RESOURCE GROUP rgroup2 SET (USER='user1');
此SQL语句将user1用户加入到rgroup2资源组中,user1用户将受到rgroup2中资源组的资源使用控制。
查看资源组与用户关联关系,通过系统表sys_resauthid可查询数据库用户和资源组的关联。
select * from sys_resauthid;
开启资源组后连接数据库报错或警告时,确认GUC参数设置,以及cgroup目录的权限和拥有者,可以使用以下命令清除资源组的kingbase节点,然后重新连接数据库会再次创建cgroup的kingbase节点。
cgdelete -r cpu:kingbase




