すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:ディスククォータの管理

最終更新日:Sep 29, 2024

Diskquotaは、AnalyticDB for PostgreSQLのディスククォータ管理を提供する拡張機能です。 スーパーユーザーを使用して、スキーマとロールのディスククォータを設定できます。 このトピックでは、AnalyticDB for PostgreSQLでdiskquota拡張機能を使用する方法について説明します。

説明

ディスククォータ管理は、エラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスでのみサポートされます。

diskquota拡張機能の有効化と無効化

  1. AnalyticDB for PostgreSQLインスタンスにdiskquotaという名前のデータベースを作成し、diskquota拡張機能が有効になっているデータベースを格納します。

    createdb diskquota;
  2. チケットを起票

    diskquotaデータベースをshared_preload_librariesに追加し、AnalyticDB for PostgreSQLインスタンスを再起動します。

  3. diskquota拡張機能を有効にします。

    CREATE EXTENSION diskquota;
    CREATE EXTENSION
  4. diskquota拡張機能を無効にします。

    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拡張機能はクエリをキャンセルし、スキーマまたはロールをブラックリストに追加します。

例: スキーマのディスククォータの設定

  1. データベースとスキーマを作成します。

    createdb myadbpg    
    psql myadbpg
    
    CREATE EXTENSION diskquota;        # Enable the diskquota extension. 
    CREATE EXTENSION                            
    
    CREATE SCHEMA adbpg1;
    CREATE SCHEMA
  2. スキーマのディスククォータを設定します。

    SELECT diskquota.set_schema_quota('adbpg1', '1MB');     
     set_schema_quota
    ------------------
    
    (1 row)
  3. テーブルを作成し、テーブルにデータを挿入します。

    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
  4. ディスククォータを超えるデータをテーブルに挿入します。 エラーが報告されます。

    INSERT INTO a SELECT generate_series(1,100);
    ERROR:  schema's disk space quota exceeded with name:adbpg1
  5. adbpg1スキーマのディスククォータの制限を取り消すには、ディスククォータを -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% 未満のパフォーマンス損失が発生します。