Greenplum或DeepGreen中检查资源队列状态

查看分配到资源队列的 ROLE
要查看ROLE与资源队列之间的关联关系,使用系统日志表pg_roles和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;


 rolname  |  rsqname   
----------+------------
 zhangyun | adhoc
 gpadmin  | pg_default
 
查看资源队列中等待的语句
当语句在资源队列中执行时,其会被记录在pg_locks系统日志表中。这里可以
查看到所有的活动语句和等待语句。为了检查处于等待状态的语句(即便没有语
句在等待),可以使用gp_toolkit.gp_locks_on_resqueue视图:
SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';


 lorusename | lorrsqname | lorlocktype | lorobjid | lortransaction | lorpid | lormode | lorgranted | lorwaiting 
------------+------------+-------------+----------+----------------+--------+---------+------------+------------
(0 rows)


若该查询没有结果返回,意味着此时没有语句在资源队列中等待执行。


清除资源队列中等待的语句

查看当前处于活动状态或者等待状态的语句:
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;


 rolname | rsqname | pid | granted | current_query | datname 
---------+---------+-----+---------+---------------+---------
(0 rows)




若没有结果返回,意味着当前没有语句处于资源队列中。 比如有两个语句在资
源队列中可能是这种样子的:
rolname | rsqname | pid | granted | current_query | datname
-----------------------------------------------------------------------
zhangyun | adhoc | 23151 | t | <IDLE> in transaction | zhangyun_db
zhangyun | adhoc | 24188 | f | SELECT count(1) FROM mybigtable; | zhangyun_db
根据输出结果确定需要清除语句的进程ID(pid)。 通过下面的方式清除语句:
pg_cancel_backend(24188)


尽量不要使用OS的KILL命令。


查看活动语句的优先级
在gp_toolkit模式中有个视图gp_resq_priority_statement,其包含了所有正在执行
的语句的优先级,会话ID等信息。 该视图只能通过gp_toolkit模式访问。


select * from gp_toolkit.gp_resq_priority_statement ;


 rqpdatname | rqpusename | rqpsession | rqpcommand | rqppriority | rqpweight |                       rqpquery                        
------------+------------+------------+------------+-------------+-----------+-------------------------------------------------------
 template1  | gpadmin    |          9 |         10 | MAX         |   1000000 | select * from gp_toolkit.gp_resq_priority_statement ;
 
 
重置活动语句的优先级
SUPERUSER可以在语句运行期间通过内置函数gp_adjust_priority(session_id,
statement_count, priority)调整其优先级。 通过该函数SUPERUSER可以提升或者
降低任何语句的优先级。例如:
SELECT gp_adjust_priority(6, 18, 'HIGH');


该函数需要获取语句的SESSION ID和Statement Count两个参数, SUPERUSER
可以通过gp_toolkit模式的视图gp_resq_priority_statement获得, session_id和
statement_count两个参数分别对应 rqpsession和rqpcommand。 该函数只对指定
的语句有效,同一个资源队列随后的语句仍然使用其预先设定的优先级






 
 

你可能感兴趣的:(Greenplum或DeepGreen中检查资源队列状态)