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=] ]
[ MIN_COST=float ]
[ PRIORITY= ]
[ MEMORY_LIMIT='memory_units' ]
| MAX_COST=float [ COST_OVERCOMMIT= ]
[ ACTIVE_STATEMENTS=integer ]
[ MIN_COST=float ]
[ PRIORITY= ]
[ MEMORY_LIMIT='memory_units' ]
13.2.2参数说明
1、ACTIVE_STATEMENTS:指运行同时运行的SQL数量,超过该数量的请求将会排队等待,默认为-1,表示不受限制。
2、MAX_COST:该队列允许运行的单个SQL最大COST值,默认为-1,表示不受限制.
3、MIN_COST:低于该COST值的SQL直接运行,不受队列资源的限制,默认为。
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 queuetest_queuewith (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查看队列的相关参数信息
chinadaas=# 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查看资源队列相关使用情况
chinadaas=# 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查看资源队列统计信息
chinadaas=# 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查询角色分配的资源队列
chinadaas=# SELECT * from gp_toolkit.gp_resq_role;
rrrolname | rrrsqname
---------------------+------------
gpmon | pg_default
chinadaas | pg_default
gpadmin | pg_default
************************
13.4.6查询资源队列中的等待查询
chinadaas=# 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元无门槛券
私享最新 技术干货