【Vertica系列】四、资源管理器(Resource Manager)

1. 资源池架构

Vertica 处理资源的方式是以一个或者多个资源池的形式,把系统资源分成一系列的子集并按照某种方式组合。

如下表所示 vertica 预先配置了一些内嵌的资源池:

  • GENERAL

一个特殊的用来全方位应答所有未指定资源池的请求, 所有其它资源池剩余的内存都会自动配置到 general 池中, general 池的 MEMORYSIZE 参数是没有限制的,最小不能低于 1GB且不小于系统内存的 25%。
MAXMEMORYSIZE 参数有特殊含义,如设置%值代表主机系统内存总量的百分比,默认情况是95%, GENERAL.MAXMEMORYSIZE 管理所有的 RM RAM 可以被查询使用不管其设置为百分比或者具体值。
任何用户定义的资源池可以从 general池中“借”内存以满足请求需要的额外内存,直到达到参数 MAXMEMORYSIZE 的设置,但是如果其定义 MEMORYSIZE 和 MAXMEMORYSIZE 相等的情况下则不能从 general 借内存,因为它被定义为了单独的资源池。 如果同时有多个资源池向 general 借内存,则按照每个资源池的优先级设定依次满足,在这种情况下GENERAL 会提供了一些弹性的即时偏差和自定义资源池正常使用相比。

  • SYSQUERY

保留资源以允许系统表查询以保障系统表访问不会由于资源争用而堵塞。

  • SYSDATA

为访问系统表产生的中间状态结果保留临时存储空间, 如果该池设置过小,系统可能无法访问大的系统表或者高并发访问系统表。

  • WOSDATA

数据加载到 WOS 之后一旦超过 WOS 限制会自动溢出到 ROS, WOS 溢出的阀值有参数PLANNEDCONCURRENCY 控制。如该值设置为 4,即当加载数据到 WOS 的 1/4 时溢出数据到ROS 中。

  • TM

Tuple Mover (TM) 池,可以通过参数 MAXCONCURRENCY 控制可以并发运行的 TM 进程。

  • RECOVERY

用于其它节点发起的 recover 操作请求,参数 MAXCONCURRENCY 控制多少并发 recover 线程可用,它同样也可以通过参数 PLANNEDCONCURRENCY 控制如何分配内存用于 recover 语句。

  • REFRESH

用于执行 PROJECTION_REFRESHES 操作的语句,由于它不支持并发线程,所以设置MAXCONCURRENCY 是无效的。

  • DBD

用于控制 DB Designer 的内部处理语句的执行,由于 DB Designer 是资源密集型的操作,所以 DBD 池 QUEUETIMEOUT=0s,当资源不够时 DBD 池会立即报错,而不进行队列等待, vertica 不建议自行设置该池

  • JVM

用于控制执行用户自定义的 java 扩展程序, 当一个用户自定义的程序启动 JVM 后,它会为这些特定的任务从 JVM 池中拉出资源,但是系统并不为 JVM 保留内存,它最大可以扩展到系统内存的 10%或者 2GB 中的小者。可以通过调整配置改变该池的大小,但是它跟其它池不同支处是, session 结束之后资源才能释放。

2.资源池参数

  • MEMORYSIZE

对于 GENERAL 池可以忽略
对于其它池默认 0%,指可以从 GENERAL 借的内存大小,设置时考虑以下情况:
1、对于该池中特定的查询给予额外的内存,该内存不能被其它进程所用,那么是该池没有查询的情况下;
2、和参数 PLANNEDCONCURRENCY 配合使用以优化指定查询的内存使用,这是专家级别的使用。

  • MAXMEMORYSIZE

对于 GENERAL 池可以忽略
对于其它池用于限制该池的大小或者可以从 GENERAL 池借内存的上限,它提供了一种机制, 用以加强对某些类别的工作负载的内存使用情况的硬限制。
如加载数据的进程不能使用超过 4GB 的可用内存。

  • EXECUTIONPARALLELISM

此参数用于限制在这个资源池中处理任何单一查询的线程的并发数量。
减小该值能够提升该资源池中小查询的吞吐量,尤其是当查询并发执行时。
如果选择 AUTO 会由系统来选择,如果选择手动设置,请输入 1 到 CPU core 的数量。

  • PRIORITY

此参数用于排序 GENERAL 池的资源请求,无论是直接发起到 GENERAL 池的请求还是从 GENERAL 池借内存的请求。
内部池( SYSQUERY, RECOVERY, TM) 优先级的范围是 110, DBA 创建的资源池的范围是 100,内部池的优先级要总是比 DBA 创建的优先级高。
资源池的优先级是相对的,拥有高优先级的资源池和拥有低优先级的资源池具有相同的增量资源的访问。
对于单独资源池优先级没有意义,因为它不向 GENERAL 池借内存。

  • RUNTIMEPRIORITY

此参数用于设置查询运行状态的优先级,任何超过参数 RUNTIMEPRIORITYTHRESHOLD指定的限制未完成的查询都被赋予该参数指定的优先级。
1、如果你期望达到短查询获得高优先级的效果,设置 RUNTIMEPRIORITY 为MEDIUM 或者 LOW 优先级, RUNTIMEPRIORITYTHRESHOLD 设置为一个小的数字以适应你的查询。
2、如果你希望所有查询都有相同的优先级,那么可以设置 RUNTIMEPRIORITY 为HIGH、 MEDIUM、 LOW, RUNTIMEPRIORITYTHRESHOLD 设置 0。

  • RUNTIMEPRIORITYTHRESHOLD

此参数用于指定查询总是用于高优先级执行的时间,默认值为 2( s),设置为 0即关掉该特性。

  • QUEUETIMEOUT

此参数用于改变资源池超时时间(默认 5m)
它可以用于定制不同负载的超时间隔,比如对于长的批量操作,得到结果比响应时间重要,所以可能提高该值或者不限制;对于交互式的应用,降低该值或者设置为0,让无法立即获得资源的查询马上报错,而不进入等待队列。
需要注意:提高该值会增加等待队列,但是并不一定增加系统吞吐量

  • PLANNEDCONCURRENCY

此参数用于设定资源池的并行度
当设置为 AUTO 时,由 vertica 来评估该参数值,它会选择 CPU core 数量、RAM/2GB 中的较小者,但是最小值不低于 4。
Vertica 建议根据一段时间系统性能的评估调整该参数。
对于 TM 池来说,参数 PLANNEDCONCURRENCY 的设置要和 CPU、内存、 IO 子系统相适应的。对于某一 IO 子系统,提高该值可能会造成系统的 IO 瓶颈。所以需要根据对 IO 子系统的队列长度、多队列、写延迟的监控,及时调整设置以保障不会造成IO 系统的瓶颈。 另外同时需要考虑,分区数据文件; 调整 block-size 优化 IO 系统。如 RAID5 或者 RAID 10。
说明:
考虑在每个查询的最大资源量和一定时间内并发查询的数量取一个平衡。
结合参数 MEMORYSIZE 一起使用控制查询的内存使用量
对于节点的 CPU core 不一致的集群来说,设置 AUTO 以适应不同的节点, 分布式
查询运行像最小有效计划的并发。

  • MAXCONCURRENCY

此参数用于控制资源池上的最大并发数,包括 GENERAL 池。
也可以从连接层来控制最大的并发连接数,有参数 MaxClientSessions 控制。

  • RUNTIMECAP

此参数用于控制失控的查询,它指定查询所能执行的最大时间,设置该参数为一个时间间隔,如'1 minute' or '100 seconds',但是最大不能超过一年。
如果用户或者 session 也有 RUNTIMECAP 限制,则取其中最小的一个。

  • SINGLEINITIATOR

该参数已过时,用于向后兼容,不必修改默认值

  • CPUAFFINITYSET

此参数用于指定资源池锁定的 CPU 数量,它要保持在集群间一致,可以通过命令:
lscpu | grep "^CPU(s)"
查看系统 CPU 数。

  • CPUAFFINITYMODE

此参数用于控制资源池中独占模式或共享模式锁定的有参数 CPUAFFINITYSET 指定的 CPU 数量。

3 常用SQL

3.1 创建资源池

CREATE RESOURCE POOL pool-name 
... [ MEMORYSIZE {'sizeUnits' |DEFAULT }]
... [ MAXMEMORYSIZE {'sizeUnits' | NONE |DEFAULT }] 
... [ EXECUTIONPARALLELISM {int | AUTO | DEFAULT} ]
... [ PRIORITY {integer  | HOLD | DEFAULT}] 
... [ RUNTIMEPRIORITY { HIGH | MEDIUM | LOW |DEFAULT} ]
... [ RUNTIMEPRIORITYTHRESHOLD { integer |DEFAULT }]
... [ QUEUETIMEOUT {integer | NONE |DEFAULT}] 
... [ PLANNEDCONCURRENCY {integer | DEFAULT |AUTO }] 
... [ MAXCONCURRENCY {integer  | NONE |DEFAULT }]
... [ RUNTIMECAP {interval | NONE | DEFAULT} ]
... [ SINGLEINITIATOR { bool | DEFAULT }]
... [ CPUAFFINITYSET { 'cpuIndex' | 'cpuIndex list' | 'integer percentage' | NONE | DEFAULT } ]
... [ CPUAFFINITYMODE { SHARED | EXCLUSIVE | ANY | DEFAULT } ]
... [ CASCADE TO {secondary_pool | DEFAULT} ]

3.2 指定用户使用的资源池

ALTER USER user-name RESOURCE POOL pool-name

本文来自AlcorZheng个人博客

转载于:https://my.oschina.net/zhx56/blog/1791811

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值