本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

磁碟配額管理

更新時間:2024-02-05 10:24

Diskquota可以對AnalyticDB PostgreSQL版的磁碟配額進行管理,可以允許超級使用者為Schema和Role設定磁碟使用配額。本文將介紹如何在AnalyticDB PostgreSQL版中建立和使用Diskquota。

說明

磁碟配額管理功能僅支援儲存彈性模式的AnalyticDB PostgreSQL版執行個體。

啟用和關閉Diskquota

  1. 建立Diskquota資料庫,Diskquota模組使用此資料庫儲存啟用該模組的資料庫列表。

    createdb diskquota;
  2. 提交工單聯絡支援人員將Diskquota加入shared_preload_libraries並重啟AnalyticDB PostgreSQL版執行個體。

  3. 啟用Diskquota。

    CREATE EXTENSION diskquota;
    CREATE EXTENSION
  4. 關閉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進行磁碟配額管理

  1. 建立資料庫與Schema 。

    createdb myadbpg    
    psql myadbpg
    
    CREATE EXTENSION diskquota;        #啟動diskquota 
    CREATE EXTENSION                            
    
    CREATE SCHEMA adbpg1;
    CREATE SCHEMA
  2. 設定Schema磁碟配額。

    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. 通過將配額設定為-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%的效能損失。

  • 本頁導讀 (1, M)
  • 啟用和關閉Diskquota
  • 設定Schema或Role的磁碟配額大小
  • 樣本:對Schema進行磁碟配額管理
  • 查看磁碟使用方式
文檔反饋