一、查看队列中的语句和资源队列状态
gp_toolkit.gp_resqueue_status视图允许管理员查看一个负载管理资源队列的状态和活动。对于一个特定资源队列,它展示有多少查询在等待运行以及系统中当前有多少查询是活动的。要查看系统中创建的资源队列、它们的限制属性和当前状态:
=# SELECT * FROM gp_toolkit.gp_resqueue_status;
二、查看资源队列统计信息
如果想要持续跟踪资源队列的统计信息和性能,可以为资源队列启用统计收集。这可以通过在postgresql.conf文件中设置下列服务器配置参数实现:
stats_queue_level = on
一旦统计收集被启用,用户可以使用pg_stat_resqueues系统视图来查看在资源队列使用上收集的统计信息。注意启用这一特性确实会引发一点点性能开销,因为每个通过资源队列提交的查询都必须被跟踪。可以先在资源队列上启用统计收集用于初始的诊断和管理规划,然后再连续使用中禁用该特性。
三、查看指派到资源队列的角色
=# SELECT rolname, rsqname FROM pg_roles,gp_toolkit.gp_resqueue_status WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
用户可能想用这个查询创建一个视图来简化未来的查询。例如:
=# CREATE VIEW role2queue AS SELECT rolname, rsqname FROM pg_roles, pg_resqueue WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
然后就可以只查询该视图:
=# SELECT * FROM role2queue;
四、查看资源队列的等待查询
当资源队列的一个槽被使用时,它被记录在pg_locks系统目录表中。在其中用户可以看到所有资源队列的所有当前活跃的以及在等待的查询。要检查被放入队列中的语句(甚至不在等待的语句),用户还可以使用gp_toolkit.gp_locks_on_resqueue视图。例如:
=# SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
五、资源队列清除等待语句
在某些情况下,用户可能想要从资源队列中清除等待的语句。例如,用户可能想移除在队列中等待但还未被执行的语句。用户可能还想停止已经被启动但是执行时间太久的查询,或者是在事务中闲置并且占据其他用户所需的资源队列槽的查询。要做到这一点,用户必须标识出想要清除的语句,确定它的进程 ID(pid),然后使用pg_cancel_backend和进程ID来结束该进程(如下所 示)。可以选择对被结束的进程发送一个消息来告诉用户原因,该消息作为第二个参数传入。
例如,要查看在所有资源队列中当前活动的或者在等待的语句,运行下列查询:
=# 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;
如果这个查询不返回结果,那就意味着当前没有语句在资源队列中等待。例如,下面的资源队列在结果中有两个语句:
rolname | rsqname | pid | granted | current_query | datname
-----------------------------------------------------------------------
sammy | webuser | 31861 | t | <IDLE> in transaction | namesdb
daria | webuser | 31905 | f | SELECT * FROM topten; | namesdb
使用这一输出来标识出想要从资源队列中清除的语句的进程ID(pid)。要清除语句,用户可以在主机上打开一个终端窗口并且取消对应的进程。例如:
=# pg_cancel_backend(31905);
六、查看活动语句的优先权
gp_toolkit管理方案有一个名为gp_resq_priority_statement的视图,它列出了当前正在被执行的语句并且提供优先权、会话ID和其他信息。
七、重置活动语句的优先权
超级用户可以使用内建函数gp_adjust_priority(session_id,statement_count,priority)调整当前正在被执行的语句的优先权。使用这个函数,超级用户可以提升或者降低任意查询的优先权。例如:
=# SELECT gp_adjust_priority(752, 24905, 'HIGH')
为了获得这个函数所需的会话ID和语句计数参数,超级用户可以使用gp_toolkit管理方案的视图gp_resq_priority_statement。从该视图用户可以把这些值用作该函数的参数。
- rqpsession列的值用作session_id参数
-
rqpcommand列的值用作 statement_count参数
-
rqppriority列的值是当前优先权。可以指定字符串值MAX , HIGH , MEDIUM 或者 LOW 作为priority