Diskquota可以对AnalyticDB PostgreSQL版的磁盘配额进行管理,可以允许超级用户为Schema和Role设置磁盘使用配额。本文将介绍如何在AnalyticDB PostgreSQL版中创建和使用Diskquota。
说明
磁盘配额管理功能仅支持存储弹性模式的AnalyticDB PostgreSQL版实例。
启用和关闭Diskquota
创建Diskquota数据库,Diskquota模块使用此数据库存储启用该模块的数据库列表。
createdb diskquota;
请提交工单联系技术支持将Diskquota加入shared_preload_libraries并重启AnalyticDB PostgreSQL版实例。
启用Diskquota。
CREATE EXTENSION diskquota; CREATE EXTENSION
关闭Diskquota。
drop extension diskquota; DROP EXTENSION
说明
如果在已经包含数据的数据库中使用Diskquota,则必须初始化Diskquota表。文件比较多时,需要耗费一定时间。
SELECT diskquota.init_table_size_table();
设置Schema或Role的磁盘配额大小
设置Schema的磁盘配额。
SELECT diskquota.set_schema_quota('adbpg1', '1MB'); set_schema_quota ------------------ (1 row)
设置Role的磁盘配额。
select diskquota.set_role_quota('u1', '250 MB'); set_role_quota ---------------- (1 row)
说明
磁盘配额以MB、GB、TB、PB为单位。 当设置为-1时,代表取消磁盘配额限制。Diskquota在查询前与磁盘配额和黑名单比较,当超过配额时自动加入黑名单或本身在黑名单中便取消执行,属于软限制。
示例:对Schema进行磁盘配额管理
创建数据库与Schema 。
createdb myadbpg psql myadbpg CREATE EXTENSION diskquota; #启动diskquota CREATE EXTENSION CREATE SCHEMA adbpg1; CREATE SCHEMA
设置Schema磁盘配额。
SELECT diskquota.set_schema_quota('adbpg1', '1MB'); set_schema_quota ------------------ (1 row)
创建表并插入数据。
SET search_path TO adbpg1; SET CREATE TABLE a(i int); INSERT INTO a SELECT generate_series(1,100); INSERT 0 100 INSERT INTO a SELECT generate_series(1,10000000); INSERT 0 10000000
超出配额时发生错误,并禁止插入。
INSERT INTO a SELECT generate_series(1,100); ERROR: schema's disk space quota exceeded with name:adbpg1
通过将配额设置为-1取消adbpg1的磁盘配额限制,然后再次插入少量数据。
INSERT命令之前的5秒钟睡眠可确保在运行命令之前更新磁盘配额表大小数据。
SELECT diskquota.set_schema_quota('adbpg1', '-1'); set_schema_quota ------------------ (1 row)
SELECT pg_sleep(5); pg_sleep ---------- (1 row) INSERT INTO a SELECT generate_series(1,100); INSERT 0 100
查看磁盘使用情况
查看Schema的磁盘使用情况。
SELECT * FROM diskquota.show_fast_schema_quota_view; schema_name | schema_oid | quota_in_mb | nspsize_in_bytes -------------+------------+-------------+------------------ adbpg1 | 16806 | 2000 | 721321984 (1 row)
查看Role的磁盘使用情况。
SELECT * FROM diskquota.show_fast_role_quota_view; role_name | role_oid | quota_in_mb | rolsize_in_bytes -----------+----------+-------------+------------------ u1 | 16810 | 250 | 0 (1 row)
说明
启用Diskquota后经AnalyticDB PostgreSQL版官方测试 ,有低于2%-3%的性能损失。
文档内容是否对您有帮助?