Diskquotaは、AnalyticDB for PostgreSQLのディスククォータ管理を提供する拡張機能です。 スーパーユーザーを使用して、スキーマとロールのディスククォータを設定できます。 このトピックでは、AnalyticDB for PostgreSQLでdiskquota拡張機能を使用する方法について説明します。
ディスククォータ管理は、エラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスでのみサポートされます。
diskquota拡張機能の有効化と無効化
AnalyticDB for PostgreSQLインスタンスにdiskquotaという名前のデータベースを作成し、diskquota拡張機能が有効になっているデータベースを格納します。
createdb diskquota;diskquotaデータベースをshared_preload_librariesに追加し、AnalyticDB for PostgreSQLインスタンスを再起動します。
diskquota拡張機能を有効にします。
CREATE EXTENSION diskquota; CREATE EXTENSIONdiskquota拡張機能を無効にします。
drop extension diskquota; DROP EXTENSION
データを含むデータベースでdiskquota拡張機能を使用する場合は、diskquotaテーブルを初期化する必要があります。 大量のデータが存在する場合、この操作は時間がかかる。
SELECT diskquota.init_table_size_table();スキーマまたはロールのディスククォータの設定
スキーマのディスククォータを設定します。
SELECT diskquota.set_schema_quota('adbpg1', '1MB'); set_schema_quota ------------------ (1 row)ロールのディスククォータを設定します。
select diskquota.set_role_quota('u1', '250 MB'); set_role_quota ---------------- (1 row)
ディスククォータは、MB、GB、TB、またはPBで測定されます。 ディスククォータを-1に設定した場合、ディスククォータに制限はありません。 diskquota拡張は、ディスク使用量のソフトな制限です。 SELECTステートメントが実行される前に、diskquota拡張機能は関連するスキーマまたはロールをチェックします。 スキーマまたはロールがクォータ外ブラックリストに含まれている場合、diskquota拡張機能はクエリを禁止します。 クエリ中にクォータ制限に達すると、diskquota拡張機能はクエリをキャンセルし、スキーマまたはロールをブラックリストに追加します。
例: スキーマのディスククォータの設定
データベースとスキーマを作成します。
createdb myadbpg psql myadbpg CREATE EXTENSION diskquota; # Enable the diskquota extension. CREATE EXTENSION CREATE SCHEMA adbpg1; CREATE 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:adbpg1adbpg1スキーマのディスククォータの制限を取り消すには、ディスククォータを -1に設定します。 テーブルにデータを挿入します。
INSERTステートメントの前に、SELECT pg_sleep(5) ステートメントを実行して、遅延した5秒以内にdiskquotaテーブルが更新されるようにします。
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
ディスク使用量の照会
スキーマのディスク使用率を照会します。
SELECT * FROM diskquota.show_fast_schema_quota_view; schema_name | schema_oid | quota_in_mb | nspsize_in_bytes -------------+------------+-------------+------------------ adbpg1 | 16806 | 2000 | 721321984 (1 row)ロールのディスク使用率を照会します。
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 for PostgreSQLテストで2% 〜3% 未満のパフォーマンス損失が発生します。