400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 FAQ
定义一个新的资源队列。
CREATE RESOURCE QUEUE name WITH (queue_attribute=value [, ... ])
其中queue_attribute为:
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' ]
为 YMatrix 数据库资源管理创建一个新的资源队列。 资源队列必须具有ACTIVE_STATEMENTS或MAX_COST值(或者可以同时具有两者)。 只有超级用户才能创建资源队列。
具有ACTIVE_STATEMENTS阈值的资源队列为分配给该队列的角色可以执行的查询数量设置了最大限制。 它控制允许同时运行的活动查询的数量。 ACTIVE_STATEMENTS的值应为大于0的整数。
具有MAX_COST阈值的资源队列对可以由分配给该队列的角色执行的查询的总成本设置最大限制。 成本以 YMatrix 数据库查询优化器确定的查询的估计总成本来衡量(如查询的EXPLAIN输出中所示)。 因此,管理员必须熟悉通常在系统上执行的查询,以便为队列设置适当的成本阈值。 成本以获取磁盘页面为单位进行衡量;1.0等于读取一个连续的磁盘页面。 MAX_COST的值指定为浮点数(例如100.0),也可以指定为指数(例如1e + 2)。 如果基于成本阈值限制资源队列,则管理员可以允许COST_OVERCOMMIT=TRUE(默认值)。 这意味着将允许运行超过允许的成本阈值的查询,但仅在系统空闲时才允许运行。 如果指定COST_OVERCOMMIT=FALSE,则超出成本限制的查询将始终被拒绝,并且永远不允许运行。 通过为MIN_COST指定一个值,管理员可以为小型查询定义费用,这些费用将免于资源排队。
如果未为ACTIVE_STATEMENTS或MAX_COST定义值,则默认情况下将其设置为-1(表示无限制)。 定义资源队列后,必须使用ALTER ROLE或CREATE ROLE命令将角色分配给队列。
您可以选择将PRIORITY分配给资源队列, 以控制与该队列相关联的查询相对于其他资源队列使用的可用CPU资源的相对份额。 如果未为PRIORITY定义值,则与队列关联的查询的默认优先级为MEDIUM。
具有可选MEMORY_LIMIT阈值的资源队列设置了对通过资源队列提交的所有查询可以在segment主机上使用的最大内存量的限制。 这就决定了一个查询的所有工作进程可以在查询执行期间的segment主机上消耗的存储器的总量。 YMatrix 建议将MEMORY_LIMIT与ACTIVE_STATEMENTS结合使用,而不要与MAX_COST结合使用。 在基于语句的队列上,每个查询分配的默认内存量为:MEMORY_LIMIT / ACTIVE_STATEMENTS。 在基于成本的队列上,每个查询分配的默认内存量为:MEMORY_LIMIT *(query_cost / MAX_COST)。
如果不超过MEMORY_LIMIT或statement_mem, 则可以使用statement_mem服务器配置参数在每个查询的基础上覆盖默认内存分配。 例如,为一个特定的查询分配更多的内存:
=> SET statement_mem='2GB';
=> SELECT * FROM my_big_table WHERE column='value' ORDER BY id;
=> RESET statement_mem;
您所有资源队列的MEMORY_LIMIT值不应超过segment主机的物理内存量。 如果工作负载分散在多个队列中,则内存分配可能会超额预定。 但是,如果超出了gp_vmem_protect_limit中指定的segment主机内存限制,则可以在执行期间取消查询。
name
ACTIVE_STATEMENTS integer
MEMORY_LIMIT 'memory_units'
MAX_COST float
COST_OVERCOMMIT boolean
MIN_COST float
PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX}
使用gp_toolkit.gp_resqueue_status系统视图查看资源队列的限制设置和当前状态:
SELECT * from gp_toolkit.gp_resqueue_status WHERE
rsqname='queue_name';
还有另一个名为pg_stat_resqueues的系统视图,该视图显示了一段时间内资源队列的统计指标。 但是,要使用此视图,必须启用stats_queue_level服务器配置参数。
CREATE RESOURCE QUEUE不能在事务中运行。
此外,在执行EXPLAIN ANALYZE命令的过程中运行的SQL语句将从资源队列中排除。
创建一个活动查询限制为20的资源队列:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=20);
创建一个资源队列,其活动查询限制为20,总内存限制为2000MB(每个查询在执行时将分配100MB的segment主机内存):
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=20,
MEMORY_LIMIT='2000MB');
创建一个查询费用限制为3000.0的资源队列:
CREATE RESOURCE QUEUE myqueue WITH (MAX_COST=3000.0);
创建一个查询成本限制为3^10(或30000000000.0)的资源队列,并且不允许过量使用。 允许成本低于500的小型查询立即运行:
CREATE RESOURCE QUEUE myqueue WITH (MAX_COST=3e+10,
COST_OVERCOMMIT=FALSE, MIN_COST=500.0);
创建同时具有活动查询限制和查询成本限制的资源队列:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=30,
MAX_COST=5000.00);
创建一个活动查询限制为5且最大优先级设置的资源队列:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=5,
PRIORITY=MAX);
CREATE RESOURCE QUEUE是 YMatrix 数据库扩展。 SQL标准中没有提供资源队列或资源管理的规定。