全部產品
Search
文件中心

Hologres:自動限流(Beta)

更新時間:Aug 06, 2025

Hologres自V3.1版本起,支援針對查詢隊列配置自動限流,基於計算群組的負載情況,自動調整查詢隊列最大並發數的限制,最終實現自動限流(自動流控)。

適用情境

自動限流的原理是根據負載情況,動態調整查詢隊列的最大並發數,通過控制計算群組中並發執行的Query數量,達到避免計算資源負載過高的目的。因此該功能的適用情境如下:

  • 高並發情境:如果並發數較高,且每個請求的開銷比較均勻,則自動限流功能會動態調整並發數限制,最終CPU曲線將穩定維持在高水位,且不會達到100%的佔用率。

    說明
    • 如果並發數過低,則動態調整並發數限制時,CPU曲線容易忽高忽低,出現“鋸齒狀”,導致CPU使用率低下。

    • 在更為極端的情況下,如果僅存在單個請求的大查詢,則自動限流功能不會生效。

  • 可容忍請求適當延時:由於該功能為流量限制,超過限制的Query會在查詢隊列中排隊,因此這部分請求的延時會相應增加。

  • 高並發的時間難以預知:無法確定流量請求突發的時間,難以提前預留計算資源應對該部分請求,可以通過自動限流功能降低系統穩定性風險。

如下情境建議使用其他方案:

  • 時間周期性特徵明顯:如果每天的流量高峰時間相對固定,推薦使用計算群組分時彈性功能,定時擴縮容。

  • 低並發的大查詢:自動限流功能對低並發的大查詢作用較小,建議使用Serverless Computing資源執行該部分請求,詳情請參見Serverless Computing使用指南

  • 無法容忍請求延時:需要增加計算資源量,以兼顧高並發與低延時的需求。可以擴容計算資源,或使用查詢隊列的大查詢控制功能,將執行慢的請求轉寄至Serverless中執行,詳情請參見大查詢控制

前提條件

建立查詢隊列

注意事項

  • 僅Hologres V3.1或以上版本的計算群組型執行個體支援自動限流,通用型執行個體不支援。

    說明

    您可先將通用型執行個體轉為計算群組型,再使用該功能,詳情請參見通用型執行個體轉換為計算群組型執行個體

  • 僅進入查詢隊列的請求會受自動限流量控制,即engine_type為HQEPQESQEHiveQE查詢,Query類型包括SELECT、INSERT、UPDATE、DELETE以及COPY、CTAS等命令產生的INSERT語句。

  • 由於Fixed Plan的Query不進入查詢隊列,因此不受自動限流功能的並發數限制,詳情請參見Fixed Plan加速SQL執行。建議使用不同的計算群組,將Fixed Plan的請求和其他請求隔離,以便更好地管理資源和請求,具體請參見計算群組執行個體快速入門

使用自動限流

計算群組、查詢隊列的自動限流功能配置方法如下。

文法格式

  • 配置計算群組的自動限流功能。

    重要
    • 該功能開啟後,計算群組下的所有查詢隊列均預設開啟自動限流,可根據下文步驟按需關閉查詢隊列的自動限流功能。

    • 該功能關閉後(預設關閉),自動限流功能即關閉,系統將忽略查詢隊列層級自動限流配置開關。

    -- 計算群組層級開啟自動限流
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', true);
    
    -- 計算群組層級關閉自動限流
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', false);
  • 配置查詢隊列的自動限流功能。

    -- 查詢隊列層級開啟自動限流。預設即開啟
    CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'true');
    
    -- 關閉查詢隊列的自動限流,等價於將該隊列加入白名單,不參與限流
    CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'false');
  • 配置查詢隊列的自動限流功能的最小並發數

    說明

    在配置最小並發數後,即使系統達到該並發數限制且負載仍然較高,系統也不會自動進一步減少並發數限制。

    -- 配置查詢隊列的自動限流功能的最小並發數,預設為1,最小為1
    CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'adaptive_concurrency_limiting_min_concurrency', '<min_concurrency>');

參數說明

參數名

描述

warehouse_name

計算群組名稱。詳情請參見計算群組執行個體快速入門

query_queue_name

查詢隊列名稱。詳情請參見查詢隊列Query Queue

min_concurrency

查詢隊列自動限流功能的最小並發數。預設值為1,取值範圍為[1, 建立查詢隊列時設定的最大並發數]。

監控與營運

您可單擊Hologres管理主控台的目標執行個體ID,在監控資訊頁面查看計算群組CPU使用率(%)監控指標,監測自動限流功能的使用方式。

使用樣本

本節以PG原生效能壓測工具pgbench為例,為您展示自動限流的使用樣本和效果。

  1. 在Hologres中建立測試表並寫入資料:

    CREATE TABLE tbl_1 (col1 INT, col2 INT, col3 TEXT);
    CREATE TABLE tbl_2 (col1 INT, col2 INT, col3 TEXT);
    INSERT INTO tbl_1 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i;
    INSERT INTO tbl_2 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i;
  2. 在Hologres中將查詢隊列的最大並發數設為100,以計算群組init_warehouse和查詢隊列default_queue為例:

    CALL hg_set_query_queue_property ('init_warehouse', 'default_queue', 'max_concurrency', '100');
  3. 在用戶端pgbench所在的bin目錄下建立壓測SQL檔案select.sql,並寫入如下SQL:

    EXPLAIN ANALYZE SELECT * FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.col3 = tbl_2.col3 ORDER BY 1;
  4. 在伺服器的設定檔中添加以下命令並儲存,將密碼設定為環境變數。

    export PGPASSWORD='<AccessKey_Secret>'
  5. 進入用戶端中pgbench所在的bin目錄,執行如下壓測命令:

    ./pgbench
    -c 30 \
    -j 30 \
    -f select.sql \
    -d <Database> \
    -U <AccessKey_ID> \
    -h <Endpoint> \
    -p <Port> \
    -T 1800

    參數配置詳情請參見串連Hologres並開發

  6. 壓測期間,在Hologres中依次開啟自動限流功能、關閉自動限流功能,並觀察計算群組的CPU使用率監控指標,直至壓測完成。

    -- 開啟自動限流功能
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', true);
    
    -- 關閉自動限流功能
    CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', false);

結果分析:

壓測完成後,計算群組的CPU使用率監控指標有如下表現:

  • 壓測初期:自動限流未開啟,查詢隊列排隊數為0,計算群組CPU使用率長期處於100%,系統存在穩定性風險。

  • 壓測中期:自動限流開啟,查詢隊列排隊數和計算群組CPU使用率小幅度波動,而後查詢隊列排隊數穩定在17個左右,計算群組CPU使用率穩定在80%附近,系統穩定性風險顯著降低。

  • 壓測後期:關閉自動限流,表現與壓測初期一致。