Hologres支援細粒度資源管理能力,通過為不同的使用者帳號分配不同的計算資源(即CU,包括CPU和記憶體),限制使用者使用計算資源的上限,實現單一實例多負載的隔離,保證了使用者之間、應用之間作業的互不影響。本文為您介紹如何使用資源群組管理Hologres執行個體內的計算資源,實現資源隔離。
背景資訊
Hologres V1.0及以下版本支援在執行個體間進行資源隔離,不支援對於執行個體內部進行更細粒度的使用者層級的資源隔離。但是在實際生產環境中,往往需要根據使用者在執行個體內部進行資源隔離,限制每個使用者使用的資源上限,以保證使用者之間的作業互不影響。為滿足上述細粒度的資源隔離訴求,Hologres新增支援使用資源群組來助力您管理Hologres執行個體內的計算資源,實現資源隔離。目前由於技術的局限性,暫時無法做到所有類型的計算負載都可以通過資源群組隔離,請謹慎將該技術用在生產環境。完善的資源隔離技術,推薦採用彈性計算群組執行個體。
使用限制
僅Hologres V1.1及以上版本支援使用資源群組管理Hologres執行個體內的計算資源,如果您的執行個體是V1.1以下版本,請您使用自助升級或加入HologresDingTalk交流群反饋,詳情請參見如何擷取更多的線上支援?。
僅限具備Superuser許可權的使用者使用資源群組管理Hologres執行個體內計算資源,否則系統會提示許可權不足。
計算資源屬於執行個體層級,如果使用者有多個資料庫,所有資料庫共用同一個執行個體的計算資源,所有資料庫共用同一份資源分派方案。
HoloWeb可視化配置資源群組
通過HoloWeb可視化配置資源群組,相關操作如下。
建立資源群組
進入HoloWeb開發頁面,詳情請參見串連HoloWeb並執行查詢。
在HoloWeb開發頁面的頂部功能表列,單擊資訊安全中心。
在資訊安全中心頁面,單擊左側導覽列的資源群組管理。
在資源群組管理頁面,選擇目標執行個體名稱,單擊新增資源群組。
在新增資源群組對話方塊,輸入資源群組名稱並設定資源群組配額,單擊確認,即可完成資源群組的建立。
說明一個Hologres執行個體內所有資源群組配額總和不能超過1,否則系統會報錯。
刪除資源群組
進入HoloWeb開發頁面,詳情請參見串連HoloWeb並執行查詢。
在HoloWeb開發頁面的頂部功能表列,單擊資訊安全中心。
在資訊安全中心頁面,單擊左側導覽列的資源群組管理。
在資源群組管理頁面,單擊對應資源群組操作列的刪除,進行資源群組的刪除。
說明如果有使用者綁定到資源群組,則該資源群組不能被刪除。
調整資源群組配額
進入HoloWeb開發頁面,詳情請參見串連HoloWeb並執行查詢。
在HoloWeb開發頁面的頂部功能表列,單擊資訊安全中心。
在資訊安全中心頁面,單擊左側導覽列的資源群組管理。
在資源群組管理頁面目標資源群組的資源群組配額列,單擊調整配額。
在調整配額對話方塊,調整資源群組配額,單擊確認。
綁定使用者
建立資源群組後,您可以使用HoloWeb可視化綁定使用者至資源群組。
進入HoloWeb開發頁面,詳情請參見串連HoloWeb並執行查詢。
在HoloWeb開發頁面的頂部功能表列,單擊資訊安全中心。
在資訊安全中心頁面,單擊左側導覽列的資源群組管理。
在資源群組管理頁面,單擊對應資源群組操作列的綁定使用者。
在綁定資源群組頁面,單擊新增綁定使用者。
在綁定使用者對話方塊,選擇使用者,單擊確認。
說明如果在使用者的下拉式清單找不到對應的帳號,則說明該帳號並未添加至當前執行個體,您需要前往使用者管理頁面添加使用者。
一個使用者僅能被綁定一個資源群組,若重複綁定使用者,以最新綁定的資源群組為準。
解除綁定使用者
進入HoloWeb開發頁面,詳情請參見串連HoloWeb並執行查詢。
在HoloWeb開發頁面的頂部功能表列,單擊資訊安全中心。
在資訊安全中心頁面,單擊左側導覽列的資源群組管理。
在資源群組管理頁面,單擊對應資源群組操作列的綁定使用者。
在綁定資源群組頁面,單擊對應使用者操作列的解除綁定使用者。
在解除綁定使用者對話方塊,單擊確認。
SQL方式配置資源群組
查看資源群組配置
查看所有資源群組,每個資源群組配置的配額,以及每個資源群組綁定的使用者的SQL語句如下。
SELECT * FROM pg_holo_resource_groups;
範例結果如下。
res_group_name | property_key | property_value ----------------+--------------+------------------------------------------ resource_1 | worker_limit | 0.3 default | worker_limit | 0.7 resource_1 | bind_users | [ "13xxxxxxxxx13", "p4_29xxxxxxxxxx19" ]
新增資源群組
說明預設情況下系統會建立一個名為default的資源群組,並將所有計算資源都分配到該資源群組,且將所有未明確綁定資源的使用者都綁定至該資源群組。
建立其他資源群組後,default資源群組的規格等於所有資源群組分配之後的剩餘部分。
建議default資源群組分配資源的百分比至少為0.3。
建立資源群組的SQL語句如下。
CALL hg_create_resource_group ('resource_group_name', quota);
參數
說明
resource_group_name
資源群組名稱。您可以使用英文字元,數字和底線自訂其名稱,最大長度50個字元。
quota
資源群組分配資源的百分比。取值範圍為0.1~0.9,只支援一位小數點。
修改資源群組配額
說明一個Hologres執行個體內所有資源群組配額總和不能超過1,否則系統會報錯。
修改資源群組配額的SQL語句如下。
CALL hg_alter_resource_group ('resource_group_name', quota);
參數
說明
resource_group_name
資源群組名稱。資源群組必須是已經建立的資源群組,否則系統會報錯。
quota
資源群組分配資源的百分比。取值範圍為0.1~0.9,只支援一位小數點。
刪除資源群組
說明如果有使用者綁定到資源群組,則該資源群組不能被刪除。
刪除資源群組的SQL語句如下。
CALL hg_drop_resource_group ('resource_group_name');
參數
說明
resource_group_name
資源群組名稱。資源群組必須是已經建立的資源群組,否則系統會報錯。
將使用者綁定至資源群組
說明一個使用者僅能被綁定一個資源群組,若重複綁定使用者,以最新綁定的資源群組為準。
您可以使用如下SQL查看當前的使用者。
SELECT current_user;
在建立資源群組後,您可以將使用者綁定至資源群組,以限制其使用的計算資源。將使用者綁定至資源群組的SQL語句如下。
文法樣本
CALL hg_bind_resource_group('resource_group_name', 'user_name');
參數說明
參數
說明
resource_group_name
資源群組名稱。資源群組必須是已經建立的資源群組,否則系統會報錯。
user_name
使用者的名稱。必須是存在的使用者,且該使用者必須擁有訪問資源群組對應執行個體的許可權,否則系統會報錯。
使用樣本
CALL hg_bind_resource_group ('resource_1', 'p4_29xxxxxxxxxxx'); --注意,阿里雲賬戶需要添加雙引號 CALL hg_bind_resource_group ('resource_1', '"ALIYUN$xxxx@aliyun.com"'); CALL hg_bind_resource_group ('resource_1', '"RAM$xxx@xxx:xxxx"'); CALL hg_bind_resource_group ('resource_1', '"13xxxxxxxxxxx13"');
將使用者從資源群組解除綁定
說明將使用者從資源群組解除綁定後,該使用者隸屬於default資源群組。
將使用者從資源群組解除綁定的SQL語句如下。
文法樣本
CALL hg_unbind_resource_group('resource_group_name', 'user_name');
參數說明
參數
說明
resource_group_name
資源群組名稱。資源群組必須是已經建立的資源群組,否則系統會報錯。
user_name
使用者的名稱。必須是存在的使用者,且該使用者必須擁有訪問資源群組對應執行個體的許可權,否則系統會報錯。
使用樣本
CALL hg_unbind_resource_group ('resource_1', 'p4_29xxxxxxxxxxxxx9'); -- 注意,阿里雲賬戶需要添加雙引號 CALL hg_unbind_resource_group ('resource_1', '"RAM$xxxx@xxx:xxx"');
常見問題
Q:為什麼資源群組配額設定為0.5,CPU和記憶體指標仍然會大於50%?
目前資源群組配額限制了大部分查詢引擎的CPU和記憶體,但是有一小部分CPU和記憶體在資源群組之外不受限制(包括但不限於SQL解析、最佳化、中繼資料處理、調度、PQE執行、Compaction等)。同時即時寫入情況下,CPU受限制,記憶體不受限制。所以會出現資源群組總CPU和記憶體指標高於資源群組所設定配額的情況。