Greenplum Resource Queue (资源队列)
来源:互联网 发布:js div左右滑动切换 编辑:程序博客网 时间:2024/06/05 15:53
在4.x版本后,加入了资源队列的概念,资源队列是为了限制资源的消耗,更加合理的分配资源
主要可以限制的资源如下:
1.MEMORY_LIMIT 内存限制
2.ACTIVE_STATEMENTS 最多并发运行的SQL
3.PRIORITY 优先级,和CPU相关
4.MAX_COST 执行计划中SQL语句可以达到最大的COST
5.MIN_COST 低于这个值则绕过队列限制,立即执行
相关参数
resource_select_only参数和如果是off,那么insert,update,delete也将被资源队列限制,如果是on,那么只有select,select into,create table as select ,declare cursor被资源队列限制
max_resource_queues 资源队列最大个数
max_resource_portals_per_transaction 能打开最多多少游标
resource_cleanup_gangs_on_wait 开启查询前是否清理队列中的空闲进程
stats_queue_level 是否搜集资源队列统计信息
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' ]
| MAX_COST=float [ COST_OVERCOMMIT={TRUE|FALSE} ]
[ ACTIVE_STATEMENTS=integer ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]
实例:
create resource queue q_hank with
(ACTIVE_STATEMENTS=10,MEMORY_LIMIT='200MB',PRIORITY=HIGH,COST_OVERCOMMIT=true,MIN_COST=100,MAX_COST=1000000);
赋予role资源管理队列
alter role hank resource queue q_hank;
恢复到使用默认的资源队列,pg_default
ALTER ROLE hank RESOURCE QUEUE none;
创建后,通过以下视图可以查看到参数内容
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
q_hank | active_statements | 10 | 1
q_hank | max_cost | 1e+06 | 2
q_hank | min_cost | 100 | 3
q_hank | cost_overcommit | 1 | 4
q_hank | priority | high | 5
q_hank | memory_limit | 200MB | 6
这里解释以下参数,如果没有设置max_cost,那么每个语句使用的内存是MEMORY_LIMIT/ACTIVE_STATEMENTS,如果设置了max_cost,内存是MEMORY_LIMIT*(query_cost/max_cost),query_cost为实际SQL的cost
如果要临时执行比较消耗内存的SQL,可以修改statement_mem参数,如下:
set statement_mem='1GB';
执行语句
reset statement_mem;
另外COST_OVERCOMMIT参数为false,只要SQL超过MAX_COST就会报错,如果为true,在当前资源队列中,没有其他sql运行的时候,超过MAX_COST也会被执行
查看资源队列相关使用情况:
SELECT * FROM gp_toolkit.gp_resqueue_status; #查看资源队列状态
查询角色分配的资源队列:
SELECT rolname, rsqname FROM pg_roles,
gp_toolkit.gp_resqueue_status
WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
查询资源队列中的等待查询:
SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
清理资源队列中等待的查询:
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;
查出等待查询的pid,然后杀死该pid
pg_cancel_backend(xxxx)
查询活动语句的优先级
select * from gp_toolkit.gp_resq_priority_statement;
重设活动语句的优先级:
gp_adjust_priority(session_id, statement_count, priority)
这个函数值对当前修改的活动语句有效,同一资源队列后面执行的语句还是使用其预先设定的优先级
例子:
select * from gp_toolkit.gp_resq_priority_statement;
rqpdatname | rqpusename | rqpsession | rqpcommand | rqppriority | rqpweight | rqpquery
------------+------------+------------+------------+-------------+-----------+------------------------------------------------------
warehouse | balance | 16645 | 978 | HIGH | 1000 | delete from balance.sps_mm_base \r
select gp_adjust_priority(16645,978,'MIN');
rqpsession=session_id
rqpcommand=statement_count
MAX, HIGH, MEDIUM, or LOW = priority
主要可以限制的资源如下:
1.MEMORY_LIMIT 内存限制
2.ACTIVE_STATEMENTS 最多并发运行的SQL
3.PRIORITY 优先级,和CPU相关
4.MAX_COST 执行计划中SQL语句可以达到最大的COST
5.MIN_COST 低于这个值则绕过队列限制,立即执行
相关参数
resource_select_only参数和如果是off,那么insert,update,delete也将被资源队列限制,如果是on,那么只有select,select into,create table as select ,declare cursor被资源队列限制
max_resource_queues 资源队列最大个数
max_resource_portals_per_transaction 能打开最多多少游标
resource_cleanup_gangs_on_wait 开启查询前是否清理队列中的空闲进程
stats_queue_level 是否搜集资源队列统计信息
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' ]
| MAX_COST=float [ COST_OVERCOMMIT={TRUE|FALSE} ]
[ ACTIVE_STATEMENTS=integer ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]
实例:
create resource queue q_hank with
(ACTIVE_STATEMENTS=10,MEMORY_LIMIT='200MB',PRIORITY=HIGH,COST_OVERCOMMIT=true,MIN_COST=100,MAX_COST=1000000);
赋予role资源管理队列
alter role hank resource queue q_hank;
恢复到使用默认的资源队列,pg_default
ALTER ROLE hank RESOURCE QUEUE none;
创建后,通过以下视图可以查看到参数内容
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
q_hank | active_statements | 10 | 1
q_hank | max_cost | 1e+06 | 2
q_hank | min_cost | 100 | 3
q_hank | cost_overcommit | 1 | 4
q_hank | priority | high | 5
q_hank | memory_limit | 200MB | 6
这里解释以下参数,如果没有设置max_cost,那么每个语句使用的内存是MEMORY_LIMIT/ACTIVE_STATEMENTS,如果设置了max_cost,内存是MEMORY_LIMIT*(query_cost/max_cost),query_cost为实际SQL的cost
如果要临时执行比较消耗内存的SQL,可以修改statement_mem参数,如下:
set statement_mem='1GB';
执行语句
reset statement_mem;
另外COST_OVERCOMMIT参数为false,只要SQL超过MAX_COST就会报错,如果为true,在当前资源队列中,没有其他sql运行的时候,超过MAX_COST也会被执行
查看资源队列相关使用情况:
SELECT * FROM gp_toolkit.gp_resqueue_status; #查看资源队列状态
查询角色分配的资源队列:
SELECT rolname, rsqname FROM pg_roles,
gp_toolkit.gp_resqueue_status
WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
查询资源队列中的等待查询:
SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
清理资源队列中等待的查询:
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;
查出等待查询的pid,然后杀死该pid
pg_cancel_backend(xxxx)
查询活动语句的优先级
select * from gp_toolkit.gp_resq_priority_statement;
重设活动语句的优先级:
gp_adjust_priority(session_id, statement_count, priority)
这个函数值对当前修改的活动语句有效,同一资源队列后面执行的语句还是使用其预先设定的优先级
例子:
select * from gp_toolkit.gp_resq_priority_statement;
rqpdatname | rqpusename | rqpsession | rqpcommand | rqppriority | rqpweight | rqpquery
------------+------------+------------+------------+-------------+-----------+------------------------------------------------------
warehouse | balance | 16645 | 978 | HIGH | 1000 | delete from balance.sps_mm_base \r
select gp_adjust_priority(16645,978,'MIN');
rqpsession=session_id
rqpcommand=statement_count
MAX, HIGH, MEDIUM, or LOW = priority
阅读全文
0 0
- Greenplum Resource Queue (资源队列)
- 转载:Greenplum负载管理之Resource Queue
- Greenplum或DeepGreen中检查资源队列状态
- STL--queue(队列)
- 队列(Queue)
- 数据结构-队列(queue)
- C# 队列(Queue)
- STL - queue(队列)
- 队列(Queue)
- C#队列(Queue)
- C# 队列(Queue)
- 队列(Queue)
- 队列(queue)数据结构
- 队列(Queue)
- 队列(queue)原理
- 队列(queue)
- 队列(Queue)
- 队列(Queue)
- ITEXT 表格的指定列合并-升级版
- java中四种引用类型
- Java并发编程:线程池的使用
- ibatis环境搭建
- SharpZipLib 解压 多个分压缩包文件
- Greenplum Resource Queue (资源队列)
- JS美化input按钮,IE错误的原因
- AVPass技术分析:银行劫持类病毒鼻祖BankBot再度来袭,如何绕过谷歌play的杀毒引擎?
- ftp
- java的list的几种排序写法整理(sort的用法)
- Oracle中 delete,truncate,drop的区别
- 前端开发工具webStorm快捷键和主题推荐
- Service播放音乐
- zoj1383 zoj3418 二进制 基础