• Greenplum 资源队列(转载)


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

    参数:

    name
    资源队列的名字。

    ACTIVE_STATEMENTS integer
    带有 ACTIVE_STATEMENTS 阀值的资源队列限制了分配到队列角色所能够执行的查询的数量。它(阀值)控制着活跃查询的数量,活跃查询是在同一时间允许运行的查询数量。ACTIVE_STATEMENTS 的值应该是一个大于0的整数值。

    MEMORY_LIMIT 'memory_units'
    对于所有从该资源队列中提交的语句设置总内存配额。内存单元可以指定为kB, MB或者GB。对于一个资源队列来说最小的内存配额是10MB, 没有最大限值,但是查询执行的上边界由Segment主机的物理内存所限定。默认值时没有限制为(-1)。

    MAX_COST float
    带有MAX_COST 阀值的资源队列对查询代价设置了一个最大限制。该查询能够被分配到该队列的用户所执行。代价由Greenplum数据库查询优化器(正如查询EXPLAIN 输出显示的)确定的查询的 估计共代价 进行衡量的。 因此,管理员必须要熟悉在系统中执行的典型查询,以对队列设置一个合理的阀值。成本以磁盘页提取为单位进行衡量;1.0 等于顺序读取一个磁盘页。MAX_COST 的值可以被指定为浮点数(例如 100.0) 或者可以被指定为(例如 1e+2)。

    COST_OVERCOMMIT boolean
    如果基于 MAX_COST限制资源队列,则管理员可以允许 COST_OVERCOMMIT(默认)。这意味着超过允许的成本阈值的查询将被允许运行,但只有在系统空闲时才能运行。如果指定 COST_OVERCOMMIT=FALSE ,超过成本限制的查询将始终被拒绝,从不允许运行。

    MIN_COST float
    该是最小查询的最小查询成本限制。成本低于此限制的查询将不会排队等待立即运行。成本由Greenplum数据库查询优化器(正如查询 EXPLAIN 输出所示)确定的查询的估计总成本所衡量。 因此,管理员必须熟悉通常在系统上执行的查询,以便为被认为是小型查询设置适当的成本。 成本是以磁盘页提取为单位来衡量的; 1.0等于一个顺序的磁盘页面读取。MIN_COST 的值可以被指定为浮点数(例如 100.0)或也可以被指定为一个指数(例如 1e+2)。

    PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX}
    设置和资源队列相关查询的优先级。队里中拥有高优先级的查询和语句会在竞争中拥有更大的可用CPU资源份额。队列中拥有低优先级的查询将会被推迟,同时,更高优先级的查询将会被执行。如果没有指定优先级,和队列相关的查询的优先级为 MEDIUM。

    注意:

    1、官方建议使用MEMORY_LIMIT 和ACTIVE_STATEMENTS 来替代max_cost

    2、如果队列中未设置MEMORY_LIMIT,则每个查询可用的内存值为系统参数statement_mem的值,最大可用内存为statement_mem /ACTIVE_STATEMENTS

    3、并不是所有语句都受资源队列限制,默认情况下,只有SELECT, SELECT INTO, CREATE TABLE AS SELECT, 和DECLARE CURSOR受限,如果配置参数resource_select_only = off,则INSERT, UPDATE,DELETE语句也会受限

    4、如果没有设置max_cost,那么每个语句使用的内存是MEMORY_LIMIT/ACTIVE_STATEMENTS,如果设置了max_cost,内存是MEMORY_LIMIT*(query_cost/max_cost),query_cost为实际SQL的cost

    2、创建资源队列

    create resource queue prod_queue with (ACTIVE_STATEMENTS=100,MEMORY_LIMIT='12800MB',priority=high);
    create resource queue q_hank with (ACTIVE_STATEMENTS=10,MEMORY_LIMIT='200MB',PRIORITY=HIGH,COST_OVERCOMMIT=true,MIN_COST=100,MAX_COST=1000000);

    3、修改变更资源队列

    a) 使用ALTER RESOURCE QUEUE命令来改变资源队列的限制 
    =# ALTER RESOURCE QUEUE q_hank WITH (ACTIVE_STATEMENTS=3); 
    =# ALTER RESOURCE QUEUE q_hank WITH (MAX_COST=100000.0);

    b) 将活动语句数量或者内存限制重置为无限制,可以使用-1值。
    =# ALTER RESOURCE QUEUE q_hank WITH (MAX_COST=-1.0, MEMORY_LIMIT=‘2GB’); 

    c) 改变查询优先级
    =# ALTER RESOURCE QUEUE q_hank WITH (PRIORITY=MIN);

    4、删除资源队列

    要删除一个资源队列,该队列不能与任何ROLE相关。
    使用DROP RESOURCE QUEUE命令删除资源队列。
    =# DROP RESOURCE QUEUE q_hank;

    5、添加用户到资源队列中

    a) 赋予role资源管理队列
    alter role hank resource queue q_hank;

    b) 恢复到使用默认的资源队列
    ALTER ROLE hank RESOURCE QUEUE none; 

    6、资源队列的相关查询语句

    a) 通过以下视图可以查看到参数内容
    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

    b) 查看资源队列相关使用情况:
    SELECT * FROM gp_toolkit.gp_resqueue_status;

    c) 查看资源队列统计信息:
    SELECT * FROM pg_stat_resqueues;

    d) 查询角色分配的资源队列:
    SELECT * from gp_toolkit.gp_resq_role;

    e) 查询资源队列中的等待查询:
    SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';

    f) 查询活动语句的优先级
    select * from gp_toolkit.gp_resq_priority_statement;

    g) 清理资源队列中等待的查询:
    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;

    转载自:https://www.cnblogs.com/pl-boke/p/9852439.html

  • 相关阅读:
    27数据结构与算法分析之---二叉排序树
    26数据结构与算法分析之---线索二叉树
    25数据结构与算法分析之---树与森林
    24数据结构与算法分析之---二叉树的概念
    23数据结构与算法分析之---树的基本概念
    22数据结构与算法分析之---特殊矩阵
    21数据结构与算法分析之---多维数组
    20数据结构与算法分析之---串的模式匹配
    17数据结构与算法分析之---串的类型
    16数据结构与算法分析之---链式队列
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11898572.html
Copyright © 2020-2023  润新知