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%的效能損失。