GaussDB(DWS) 資源管理技術淺析
1? ?資源管理是什么?

1.1??? 資源管理簡介
通過引入資源監控和控制等手段,實現資源在可控的情況下被合理利用的目的,避免出現資源的無序使用,防止數據庫系統性能變慢、停止響應。資源管理可以實現以下功能:
通過創建和管理隊列,實現隊列級別資源(CPU、內存、存儲空間)隔離和作業的異常處理;
通過設置CN和隊列的并發上限,限制允許運行的并發數,超出并發數后作業排隊等待喚醒,防止并發過多導致性能下降;
通過優先級控制實現資源的有效調度,實現高優先級作業優先運行;
支持多維度資源監控視圖,可以監控作業、用戶和實例的資源消耗。
1.2??? 資源管理功能
資源管理主要包含并發控制、資源管控、資源監控以及異常作業處理。并發控制主要分為全局并發控制和資源池并發控制,其中資源池并發管控由快慢車道實現,快車道管控簡單作業,慢車道管控復雜作業,支持自動識別和手動切換快慢車道,理論上快車道并發大、作業運行時間短、占用資源少;慢車道并發少、作業運行時間長,占用資源多。
資源管控通過對計算資源和存儲資源分別管控實現作業間資源隔離,保證單作業異常不會影響到其他作業運行。下面分別對計算資源和存儲資源管控進行概述:
計算資源
計算資源包含:CPU、IO和內存。GaussDB中CPU和內存資源關聯在隊列上,用戶通過關聯隊列使用計算資源。隊列按使用場景分為超戶隊列、默認隊列和用戶隊列。其中超戶隊列不受資源管控,用于運維和故障修復;默認隊列(default_pool)為數據庫初始化階段創建的隊列,未關聯用戶隊列的用戶使用默認隊列;用戶隊列為用戶自己創建的隊列,按照用戶配置的并發和資源進行管控。IO管控基于邏輯IO實現,根據作業運行時間及優先級對IO進行管控,配置異常處理規則后,在系統IO達到瓶頸后,主動降低作業IO優先級。
2. 存儲資源
存儲資源管控包含以下幾個方面:
數據庫只讀檢測
數據庫只讀檢測主要為防止出現磁盤滿的問題,實現邏輯如下:cm_server開啟enable_transaction_read_only情況下,每十分鐘檢查一次磁盤空間占用率,當 磁盤空間占用率超過閾值(默認90%)時,就通過guc參數設置數據庫只讀,數據庫只讀后只允許只讀作業運行,作業發生寫盤操作報錯退出。但是因為數據庫只讀會導致用戶所有業務無法運行,因此在磁盤空間占用率達到80%時會提前告警提示用戶。
用戶/schema空間管控
存儲資源包含:持久表空間、臨時表空間和算子落盤空間。臨時表空間和算子落盤空間是作業運行過程中占用的空間,屬于臨時占用空間。持久表空間和臨時占? 用空間采用兩種不同的管控策略,持久表空間管控通過對用戶(隊列)和schema空間限制實現,8.1.1版本之后的GaussDB空間管控均為單實例空間,防止出現數據傾斜導致的磁盤使用問題。臨時占用空間同樣支持在用戶層級設置空間限額,另外還提供異常規則查殺臨時空間占用異常的作業。
異常處理規則
GaussDB目前支持算子落盤異常規則,用戶通過管控面或gs_cgroup工具設置算子落盤異常規則,設置異常規則后作業執行過程中算子落盤空間達到閾值后報錯退出。
1.3? ?資源管理框架
用戶連接數據庫執行SQL后,SQL會經過全局并發隊列管控以及資源池隊列管控。在作業進入管控邏輯前設置定時器,作業pending超時報錯退出,作業經過隊列管控開始運行前重新設置定時器,作業運行超時報錯退出。作業下推DN執行時實時監控作業消耗的資源并上報CN,CN根據DN上報資源信息提供異常處理和監控視圖。
下面對并發、內存和CPU管控配置方式進行簡要說明:
全局并發隊列
全局并發隊列采用GUC參數max_active_statements控制單個CN上運行并發執行的作業數量。采用全局并發隊列機制將控制所有普通用戶的執行作業,不區分復雜度,即執行語句都將作為一個執行單元,當并發執行的作業數量達到此參數閾值時,將進入隊列等待。對于初始用戶(Oid=10)執行的作業,不走全局并發控制邏輯。
注:max_active_statements限制單CN上運行的作業數,默認值為60,假設用戶有3個DN,則實際全局并發上限為3*60=180;
DDL和DML語句均受max_active_statements并發控制。
2. 資源池并發隊列
資源池并發隊列包含快車道并發隊列和慢車道并發隊列,配置方式如下:
CREATE RESOURCE POOL respool_a WITH (max_dop=10,active_statements=5);
其中max_dop為快車道并發上限,active_statements為慢車道并發上限。
注:資源池隊列只限制DML語句,不限制DDL語句;
max_dop限制單CN上資源池快車道并發數;
active_statements在靜態負載管理模式下限制單CN上資源池慢車道并發數,在動態負載管理模式下限制所有CN上資源池慢車道并發數之
3. 內存管控
實例級別內存管控:guc參數max_process_memory限制DN和CN實例的最大可用內存,當使用內存超過max_process_memory時,作業報錯退出;
可動態申請內存:max_dynamic_memory=max_process_memory-cstore_buffers(max_cstore_memory)-(udf_memory_limit - 200M) - max_shared_memory;
資源池內存管控:使用并發點數計算可執行的并發數量,active_statements<=0情況下資源池內存不受控。資源池總點數:total_points = active_statements * 100,作業使用點數:active_points = (estimate_mem/respool_mem) * active_statements * 100,estimate_mem為優化器估算的作業內存,資源池點數耗盡出發排隊。
4. CPU管控
GaussDB主要利用cgroups做cpu資源的管控,涉及cpu、cpuacct、cpuset子系統,cpu配額管控基于cpu子系統的cpu.shares實現,該配置方法的好處是:OS cpu沒有占滿的情況下,不觸發cpu管控;cpu限額管控基于cpuset實現;cpuacct子系統主要用于cpu資源使用的監控。
使用gs_cgroup工具設置cpu限額和配額,gs_cgroup工具常用命令如下:
root用戶掛載cgroup
gs_cgroup -U user -d #刪除當前掛載信息
gs_cgroup -U user -c -H homepath [-D mountpath] --upgrade
創建Class控制組
gs_cgroup -S class1 -s 40 -c
創建Workload控制組
gs_cgroup -S class 1 -G wg1 -c
為控制組分配cpu配額
gs_cgroup -S class 1 -G wg1 -g 20 -u
設置cpu限額
gs_cgroup -S class 1 -G wg1 -g 30 -u –fixed
刪除控制組
gs_cgroup -S class 1 -G wg1 -d
查看控制組信息
gs_cgroup -p #靜態配置文件信息
gs_cgroup -P #掛載信息(樹形結構)
查詢規則
設置查詢規則
gs_cgroup -S class -G wg -E "blocktime=1200,elapsedtime=2400" –a
gs_cgroup -S class -G wg -E "spillsize=256,broadcastsize=100" –a
gs_cgroup -S class -E "allcputime=100" –penalty
gs_cgroup -S class -E "qualificationtime=2400,cpuskewpercnt=90
查詢異常規則
select gs_respool_exception_info('rp_name')。
cpu管控原理:
cgroup掛載:使用root用戶掛載cgroup;
gs_cgroup -U user -c -H homepath [-D mountpath] --upgrade
cgroup創建:使用數據庫安裝用戶創建cgroup;
gs_cgroup -S class1 -G wg1 -c
cgroup關聯資源池:創建組資源池pr1關聯class控制組class1,創建業務資源池resp1關聯workload控制組wg1
CREATE RESOURCE POOL pr1 WITH(CONTROL_GROUP='class1');
CREATE RESOURCE POOL resp1 WITH(CONTROL_GROUP='class1:wg1');
用戶關聯資源池:創建組用戶role1關聯組資源池pr1,創建業務用戶usr1關聯業務資源池resp1
CREATE ROLE role1 RESOURCE POOL 'pr1' PASSWORD disable;
CREATE USER usr1 RESOURCE POOL 'resp1' PASSWORD 'Gauss_234' USER GROUP 'role1';
使用業務用戶usr1執行復雜作業,作業執行過程中調用api函數cgroup_attach_task將作業attach到class1:wg1控制組上實現cpu管控。
云數據庫 GaussDB(for openGauss)
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。