用户级磁盘配额通过设置用户的磁盘使用上限,限制所设置用户创建表的sys_tablespace 和 metadata 空间总和。
语法格式:
Grant usage on *.* to <user name> limit_storage_size=integer[K,M,G,T]
查看用户磁盘限额和磁盘使用现状:
select * from information_schema.gnodes_user_diskspace_usage;
控制刷新系统表磁盘使用现状:
_gbase_storage_flush_interval
数据库服务启动和关闭时会自动刷新磁盘使用现状记录入相应的系统表,之后由该参数控制间隔多少秒刷新系统表的磁盘统计信息。该参数的最小值为 1,最大值为86400(24 小时)。该参数可以用下面 sql 自定义设置,例如:
gbase> set global _gbase_storage_flush_interval=100;
Refresh user storage usage;
手动刷新系统表中磁盘使用现状的 sql。
示例:
gbase> create user u;
gbase> grant all on *.* to u;
gbase> grant usage on *.* to u limit_storage_size=1M;
gbase> select * from information_schema.gnodes_user_diskspace_usage;
+-----------+------------------+-------------------------+-------------------+
| NODE_NAME | User | user_limit_storage_size |user_storage_size |
+-----------+------------------+-------------------------+-------------------+
| node1 | root | |96773982 |
| node1 | gbase | |0 |
| node1 | u | 1M |0 |
| node2 | root | |96461010 |
| node2 | gbase | |0 |
| node2 | u | 1M |0 |
| node3 | root | |96548104 |
| node3 | gbase | |0 |
| node3 | u | 1M |0 |
| node4 | root | |96860988 |
| node4 | gbase | |0 |
| node4 | u | 1M |0 |
+-----------+------------------+-------------------------+-------------------+
12 rows in set (Elapsed: 00:00:00.01)
[gbase@rhel73-1 ~]$ gccli –uu
gbase> use ssbm_u;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> create table part (
-> p_partkey bigint,
-> p_name varchar(22),
-> p_mfgr varchar(6) comment 'lookup',
-> p_category varchar(7) comment 'lookup',
-> p_brand1 varchar(9) comment 'lookup',
-> p_color varchar(11) comment 'lookup',
-> p_type varchar(25) comment 'lookup',
-> p_size int,
-> p_container varchar(15) comment 'lookup'
-> );
Query OK, 0 rows affected (Elapsed: 00:00:01.60)
gbase> load data infile 'file://192.168.146.20/opt/ssbm/part.tbl'
into table part data_format 3 FIELDS TERMINATED BY '|';
Query OK, 200000 rows affected (Elapsed: 00:00:05.69)
Task 262151 finished, Loaded 200000 records, Skipped 0 records
gbase> load data infile 'file://192.168.146.20/opt/ssbm/part.tbl' into table part data_format 3 FIELDS TERMINATED BY '|';
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Task 262152failed, [192.168.146.20:5050](GBA-02AD-0005)Failed to query in gnode:
DETAIL: (GBA-01EX-700) Gbase general error:(gns_host: ::ffff:192.168.146.21) The disk space of User 'u' has exceeded the limit value.(Usage: 4437691, Limit: 1048576)
SQL: LOAD /*+ TID('262223') */ DATA INFILE '/opt/ssbm/part.tbl' INTO TABLE `ssbm_u`.`part_n1` DATA_FORMAT 3 FILE_FORMAT UNDEFINED FIELDS TERMINATED BY '|' HOST '::ffff:192.168.146.20' CURRENT_TIMESTAMP
1601029204 SCN_NUMBER 2
gbase> select * from information_schema.gnodes_user_diskspace_usage;
+-----------+------------------+-------------------------+-------------------+
| NODE_NAME | User | user_limit_storage_size |user_storage_size |
+-----------+------------------+-------------------------+-------------------+
| node1 | root | |96773982 |
| node1 | gbase | |0 |
| node1 | u | 1M |4435201 |
| node2 | root | |96461010 |
| node2 | gbase | |0 |
| node2 | u | 1M |4437691 |
| node3 | root | |96548104 |
| node3 | gbase | |0 |
| node3 | u | 1M |4438453 |
| node4 | root | |96860988 |
| node4 | gbase | |0 |
| node4 | u | 1M |4435963 |
+-----------+------------------+-------------------------+-------------------+
12 rows in set (Elapsed: 00:00:00.17)
说明:
用户级磁盘限额是用户级的,该用户所创建的多个表共享该磁盘空间。
用户级磁盘限额只统计用户创建的 express 引擎表的 sys_tablespace 和 metadata所占空间,不统计 gbase、gclusterdb、gctempdb 库各表的磁盘占用,不统计其他引擎的库表。
磁盘限额在 sql 执行开始时进行检查是否超额,执行过程中磁盘使用超额不检查不报错。
检查磁盘限额的 sql 是会增加所统计磁盘大小的 sql,对于简单的 select、delete、drop、shrink 等不会增加磁盘大小的 sql 不做超额检查。 DDL 不检查磁盘限额。
注意:
用户磁盘限额和资源池磁盘管理是从两个维度对用户创建的 express 引擎表sys_tablespace 和 metadata 占用的磁盘空间进行限制,它们相互独立,同时开启时,超过两者最低限额将会报错。




