greenplum資源隊列


1、創建資源隊列語法

Command:     CREATE RESOURCE QUEUE
Description: create a new resource queue for workload management
Syntax:
CREATE RESOURCE QUEUE name WITH (queue_attribute=value [, ... ]) 
where queue_attribute is:
   ACTIVE_STATEMENTS=integer
        [ MAX_COST=float [COST_OVERCOMMIT={TRUE|FALSE}] ]
        [ MIN_COST=float ]
        [ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
        [ MEMORY_LIMIT='memory_units' ]

參數:

name
資源隊列的名字。

ACTIVE_STATEMENTS integer
帶有 ACTIVE_STATEMENTS 閥值的資源隊列限制了分配到隊列角色所能夠執行的查詢的數量。它(閥值)控制着活躍查詢的數量,活躍查詢是在同一時間允許運行的查詢數量。ACTIVE_STATEMENTS 的值應該是一個大於0的整數值。

MEMORY_LIMIT 'memory_units'
對於所有從該資源隊列中提交的語句設置總內存配額。內存單元可以指定為kB, MB或者GB。對於一個資源隊列來說最小的內存配額是10MB, 沒有最大限值,但是查詢執行的上邊界由Segment主機的物理內存所限定。默認值時沒有限制為(-1)。

MAX_COST float
帶有MAX_COST 閥值的資源隊列對查詢代價設置了一個最大限制。該查詢能夠被分配到該隊列的用戶所執行。代價由Greenplum數據庫查詢優化器(正如查詢EXPLAIN 輸出顯示的)確定的查詢的 估計共代價 進行衡量的。 因此,管理員必須要熟悉在系統中執行的典型查詢,以對隊列設置一個合理的閥值。成本以磁盤頁提取為單位進行衡量;1.0 等於順序讀取一個磁盤頁。MAX_COST 的值可以被指定為浮點數(例如 100.0) 或者可以被指定為(例如 1e+2)。

COST_OVERCOMMIT boolean
如果基於 MAX_COST限制資源隊列,則管理員可以允許 COST_OVERCOMMIT(默認)。這意味着超過允許的成本閾值的查詢將被允許運行,但只有在系統空閑時才能運行。如果指定 COST_OVERCOMMIT=FALSE ,超過成本限制的查詢將始終被拒絕,從不允許運行。

MIN_COST float
該是最小查詢的最小查詢成本限制。成本低於此限制的查詢將不會排隊等待立即運行。成本由Greenplum數據庫查詢優化器(正如查詢 EXPLAIN 輸出所示)確定的查詢的估計總成本所衡量。 因此,管理員必須熟悉通常在系統上執行的查詢,以便為被認為是小型查詢設置適當的成本。 成本是以磁盤頁提取為單位來衡量的; 1.0等於一個順序的磁盤頁面讀取。MIN_COST 的值可以被指定為浮點數(例如 100.0)或也可以被指定為一個指數(例如 1e+2)。

PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX}
設置和資源隊列相關查詢的優先級。隊里中擁有高優先級的查詢和語句會在競爭中擁有更大的可用CPU資源份額。隊列中擁有低優先級的查詢將會被推遲,同時,更高優先級的查詢將會被執行。如果沒有指定優先級,和隊列相關的查詢的優先級為 MEDIUM。

注意:

1、官方建議使用MEMORY_LIMIT 和ACTIVE_STATEMENTS 來替代max_cost

2、如果隊列中未設置MEMORY_LIMIT,則每個查詢可用的內存值為系統參數statement_mem的值,最大可用內存為statement_mem /ACTIVE_STATEMENTS

3、並不是所有語句都受資源隊列限制,默認情況下,只有SELECT, SELECT INTO, CREATE TABLE AS SELECT, 和DECLARE CURSOR受限,如果配置參數resource_select_only = off,則INSERT, UPDATE,DELETE語句也會受限

4、如果沒有設置max_cost,那么每個語句使用的內存是MEMORY_LIMIT/ACTIVE_STATEMENTS,如果設置了max_cost,內存是MEMORY_LIMIT*(query_cost/max_cost),query_cost為實際SQL的cost

 

2、創建資源隊列

create resource queue prod_queue with (ACTIVE_STATEMENTS=100,MEMORY_LIMIT='12800MB',priority=high);
create resource queue q_hank with (ACTIVE_STATEMENTS=10,MEMORY_LIMIT='200MB',PRIORITY=HIGH,COST_OVERCOMMIT=true,MIN_COST=100,MAX_COST=1000000);

3、修改變更資源隊列

a) 使用ALTER RESOURCE QUEUE命令來改變資源隊列的限制 
=# ALTER RESOURCE QUEUE q_hank WITH (ACTIVE_STATEMENTS=3); 
=# ALTER RESOURCE QUEUE q_hank WITH (MAX_COST=100000.0);

b) 將活動語句數量或者內存限制重置為無限制,可以使用-1值。
=# ALTER RESOURCE QUEUE q_hank WITH (MAX_COST=-1.0, MEMORY_LIMIT=‘2GB’); 

c) 改變查詢優先級
=# ALTER RESOURCE QUEUE q_hank WITH (PRIORITY=MIN);

4、刪除資源隊列

要刪除一個資源隊列,該隊列不能與任何ROLE相關。
使用DROP RESOURCE QUEUE命令刪除資源隊列。
=# DROP RESOURCE QUEUE q_hank;

 

5、添加用戶到資源隊列中

a) 賦予role資源管理隊列
alter role hank resource queue q_hank;

b) 恢復到使用默認的資源隊列
ALTER ROLE hank RESOURCE QUEUE none; 

6、資源隊列的相關查詢語句

a) 通過以下視圖可以查看到參數內容
postgres=# select * from pg_resqueue_attributes;
  rsqname   |      resname                | ressetting | restypid 
------------+---------------------------------+------------+----------
 pg_default | active_statements      | 20             |        1
 pg_default | max_cost                    | -1             |        2
 pg_default | min_cost                     | 0              |        3
 pg_default | cost_overcommit        | 0              |        4
 pg_default | priority                        | medium    |        5
 pg_default | memory_limit             | -1              |        6

b) 查看資源隊列相關使用情況:
SELECT * FROM gp_toolkit.gp_resqueue_status;

c) 查看資源隊列統計信息:
SELECT * FROM pg_stat_resqueues;

d) 查詢角色分配的資源隊列:
SELECT * from gp_toolkit.gp_resq_role;

e) 查詢資源隊列中的等待查詢:
SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';

f) 查詢活動語句的優先級
select * from gp_toolkit.gp_resq_priority_statement;

g) 清理資源隊列中等待的查詢:
SELECT rolname, rsqname, pid, granted,current_query, datname
FROM pg_roles, gp_toolkit.gp_resqueue_status, pg_locks,pg_stat_activity
WHERE pg_roles.rolresqueue=pg_locks.objid
AND pg_locks.objid=gp_toolkit.gp_resqueue_status.queueid
AND pg_stat_activity.procpid=pg_locks.pid
AND pg_stat_activity.usename=pg_roles.rolname;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM