13 Greenplum 资源队列

13 Greenplum 资源队列

13.1 队列说明

在Greenplum的4.x版本之后,加入了资源队列的概念,其主要作用就是限制用户或者单个SQL对资源的消耗。避免出现消耗过多资源,影响其他用户或者SQL计算。这里的资源限制主要是指系统内存资源。

13.2 创建队列

13.2.1 创建队列语句

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' ]

| MAX_COST=float [ COST_OVERCOMMIT={TRUE|FALSE} ]

[ ACTIVE_STATEMENTS=integer ]

[ MIN_COST=float ]

[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]

[ MEMORY_LIMIT='memory_units' ]

13.2.2 参数说明

1、ACTIVE_STATEMENTS:指运行同时运行的SQL数量,超过该数量的请求将会排队等待,默认为-1,表示不受限制。

2、MAX_COST:该队列允许运行的单个SQL最大COST值,默认为-1,表示不受限制.

3、MIN_COST:低于该COST值的SQL直接运行,不受队列资源的限制,默认为0。

4、PRIORITY:队列中任务分配CPU资源的优先级,默认为MEDIUM。

5、MEMORY_LIMIT:资源队列内存限制大小,单位为kB/MB/GB。默认为-1,表示不受限制。

13.2.3 创建队列说明

1、只有superuser 角色权限的用户才可以创建资源队列

2、ACTIVE_STATEMENTS 与 MAX_COST 必须二选一,不能都设置为-1。

3、队列名不能为none,为保留标识符。

13.2.4 创建队列实例

create resource queue test_queue with (ACTIVE_STATEMENTS=50, MEMORY_LIMIT='1024GB',PRIORITY=MAX);

 

test_queue : 队列的名字

 

13.2.5 把队列给用户使用

alter role  xiaoxu  resource queue  test_queue;

 

xiaoxu : 系统中的用户信息

test_queue : 队列的名字

13.3 常用队列操作

13.3.1 修改变更资源队列

使用ALTER RESOURCE QUEUE命令来改变资源队列的限制

ALTER RESOURCE QUEUE test_queue WITH (ACTIVE_STATEMENTS=3);

ALTER RESOURCE QUEUE test_queue WITH (MAX_COST=100000.0);

 

将活动语句数量或者内存限制重置为无限制,可以使用-1值。

ALTER RESOURCE QUEUE test_queue WITH (MAX_COST=-1.0, MEMORY_LIMIT='2GB');

 

改变查询优先级

ALTER RESOURCE QUEUE test_queue WITH (PRIORITY=MIN);

 

13.3.2 删除资源队列

drop resource queue test_queue;

 

test_queue : 队列的名字

13.3.3 添加用户到资源队列中

alter role  xiaoxu  resource queue test_queue;

 

xiaoxu : 系统用户名

test_queue : 队列的名字

13.3.4 恢复到使用默认的资源队列

alter role  xiaoxu  resource queue none;

 

xiaoxu :  系统用户名

13.4 资源队列的相关查询语句

13.4.1 查看用户和用户的资源队列

SELECT rolname, rsqname FROM pg_roles, gp_toolkit.gp_resqueue_status

WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;

 

rolname : 角色的名字(用户名)

rsqname : 队列的名字

 

13.4.2 查看队列的相关参数信息

 

****** =# 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

 test_queue | active_statements | 50         |        1

 test_queue | max_cost          | -1         |        2

 test_queue | min_cost          | 0          |        3

 test_queue | cost_overcommit   | 0          |        4

 test_queue | priority          | max        |        5

 test_queue | memory_limit      | 1024GB     |        6

(12 rows)

 

Time: 6.955 ms

13.4.3 查看资源队列相关使用情况

****** =# SELECT * FROM gp_toolkit.gp_resqueue_status;

 

 queueid |  rsqname   | rsqcountlimit | rsqcountvalue | rsqcostlimit | rsqcostvalue | rsqmemorylimit | rsqmemoryvalue | rsqwaiters | rsqholders

---------+------------+---------------+---------------+--------------+--------------+----------------+----------------+------------+------------

 2156929 | test_queue |            50 |             0 |           -1 |            0 |    1.09951e+12 |              0 |          0 |          0

    6055 | pg_default |            20 |             0 |           -1 |            0 |             -1 |              0 |          0 |          0

(2 rows)

 

Time: 40.856 ms

13.4.4 查看资源队列统计信息

******=# SELECT * FROM pg_stat_resqueues;

 

 queueid | queuename  | n_queries_exec | n_queries_wait | elapsed_exec | elapsed_wait

---------+------------+----------------+----------------+--------------+--------------

    6055 | pg_default |              0 |              0 |            0 |            0

 2156929 | test_queue |              0 |              0 |            0 |            0

(2 rows)

 

Time: 18.548 ms

 

13.4.5 查询角色分配的资源队列

******=# SELECT * from gp_toolkit.gp_resq_role;

      rrrolname      | rrrsqname  

---------------------+------------

 gpmon               | pg_default

 ******           | pg_default

 gpadmin             | pg_default

************************

13.4.6 查询资源队列中的等待查询

****** =# SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';

 

 

 lorusename | lorrsqname | lorlocktype | lorobjid | lortransaction | lorpid | lormode | lorgranted | lorwaiting

------------+------------+-------------+----------+----------------+--------+---------+------------+------------

(0 rows)

 

Time: 41.413 ms

13.4.7 查询活动语句的优先级

select * from gp_toolkit.gp_resq_priority_statement

 

13.4.8 清理资源队列中等待的查询

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;

 

13.5 设置当前会话的的参数

13.5.1 设置当前的会话参数

任何会话参数可以在活跃数据库会话使用SET命令来设置。例如:

#  SET statement_mem TO '200MB';

 

参数设置是有效的该会话结束或直到发出复位命令。例如:

 

# RESET statement_mem;

在会话级别的设置将覆盖那些角色级别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒马coding

你的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值