磁盤配額管理
Diskquota可以對AnalyticDB PostgreSQL版的磁盤配額進行管理,可以允許超級用戶為Schema和Role設置磁盤使用配額。本文將介紹如何在AnalyticDB PostgreSQL版中創(chuàng)建和使用Diskquota。
磁盤配額管理功能僅支持存儲彈性模式的AnalyticDB PostgreSQL版實例。
啟用和關閉Diskquota
創(chuàng)建Diskquota數(shù)據(jù)庫,Diskquota模塊使用此數(shù)據(jù)庫存儲啟用該模塊的數(shù)據(jù)庫列表。
createdb diskquota;
請提交工單聯(lián)系技術支持將Diskquota加入shared_preload_libraries并重啟AnalyticDB PostgreSQL版實例。
啟用Diskquota。
CREATE EXTENSION diskquota; CREATE EXTENSION
關閉Diskquota。
drop extension diskquota; DROP EXTENSION
如果在已經(jīng)包含數(shù)據(jù)的數(shù)據(jù)庫中使用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在查詢前與磁盤配額和黑名單比較,當超過配額時自動加入黑名單或本身在黑名單中便取消執(zhí)行,屬于軟限制。
示例:對Schema進行磁盤配額管理
創(chuàng)建數(shù)據(jù)庫與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)
創(chuàng)建表并插入數(shù)據(jù)。
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
超出配額時發(fā)生錯誤,并禁止插入。
INSERT INTO a SELECT generate_series(1,100); ERROR: schema's disk space quota exceeded with name:adbpg1
通過將配額設置為-1取消adbpg1的磁盤配額限制,然后再次插入少量數(shù)據(jù)。
INSERT命令之前的5秒鐘睡眠可確保在運行命令之前更新磁盤配額表大小數(shù)據(jù)。
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后經(jīng)AnalyticDB PostgreSQL版官方測試 ,有低于2%-3%的性能損失。