Vertica资源池

vertica资源管理请参考之前的博文:vertica资源管理

vertica任务的执行过程:

  • 在初始节点创建全局执行计划,如果资源需求超过可用资源,就拒绝
  • 向执行节点分配全局执行计划
  • 在执行节点创建本地执行计划,判断需要的资源
  • 执行节点判断资源是否足够,然后执行查询或者查询排队(可能会因等待超时被拒绝)
  • 执行节点启动执行引擎,管理运行时资源
  • 处理结果并发送到初始节点聚合

vertica使用资源池进行以下工作:

  • 资源分配和调度
  • 并发控制
  • 动态资源管理
资源池参数
参数默认值描述
executionparallelismAUTO每个任务执行并行度(线程数),缺省为CPU核数
cpuaffinitysetnone运行的CPU核集合,缺省为所有CPU
cpuaffinitymodeANYcpu粘连模式,缺省为ANY
memorysize0%保留的专用内存,为0表示可以从GENERAL借的内存大小没有限制
maxmemorysizeNONE允许从general使用的最大内存,缺省不限制
plannedconcurrencyAUTO默认为核心数量
priority0任务排队优先级,取值-100到100
queuetimeout300任务排队超时,会被拒绝。NONE表示永不超时
runtimeprioritythreshold2任务以高优先级开始执行的时间,单位为s
runtimeprioritymedium达到阈值后的运行优先级别
runtimecapnone任务执行时长阈值,执行超时强制进入指定级联资源池,或被中断
cascadeto任务执行时间超过runtimecap后的目标资源池名称
maxconcurrencynone最大并发任务数,缺省不限制
资源分配和调度
CPU分配
  • executionparallelism:每个任务执行的线程数
  • cpuaffinity*:高优先级任务可以独占特定的CPU
内存分配
  • memorysize:独占的内存。就算空闲,别的资源也不能使用。
  • maxmemorysize:允许使用的最大内存。申请内存超出该值后任务会被立即拒绝。资源池已用内存达到该值后,后续任务会排队。
  • 任务内存预算:query_budget=maxmemorysize/plannedconcurrency
    预算的含义:规划的时候为任务预留,多退少补。但如果资源池剩余内存不够下一个任务的预算,该任务会被排队。
排队和优先级
  • 资源(内存和CPU)不满足任务的请求,任务就会被排队
  • 优先级priority高的队列,会优先申请到内存
并发控制
直接限制:最大并发数maxconcurrency

资源池中正在执行的任务数达到maxconcurrency后,后续的任务排队

间接限制:资源不足
  • 资源池已用总内存达到maxmemorysize后,后续任务排队
  • 可以粗略的认为:资源池并行任务执行数<=plannedconcurrency
动态资源管理
运行时动态调整
  • 任何任务都会按最高优先级执行runtimeprioritythreshold时长,然后再按runtimepriority优先级执行
  • 任务执行时间超过runtimecap后,会被中断执行,或者进入指定级联资源池
资源池级联

任务执行时间超过runtimecap后,会被移动到cascadeto指定的资源池继续执行(如果新资源池有足够资源)或重新排队

常见并发场景优化方法

并发(混合负载)优化是个统筹优化问题,应先设置目标和评价方法

基本原则
  • 应用层要求通过连接池等技术控制并发请求,数据库上的并发请求通常不宜比CPU核数高太多,因为每个连接(哪怕是空闲的)都要消耗一个线程
  • 业务用户一定要有自己的资源池,杜绝用缺省general pool,否则系统过载时,dbadmin的管理任务也得排队
  • 用profile来评估查询的内存需求,通常让query_budget刚刚满足需求即可,这样可以同时执行更多的任务
特定应用的性能要求高
  • 给它高优先级(priority)以便更快抢到资源
  • 运行优先级(runtimepriority)为high
  • 甚至独占CPU(cpuaffinity*)和内存(memorysize)
特定应用并发/吞吐量要求高
  • 尽量用mergejoin/groupbypipe替代hashjoin、groupbyhash,尽管单个查询hashjoin/grouphash可能会更快,但它消耗更多的CPU和内存,不利于并发
  • 降低高并发时的上下文切换导致的竞争。高并发场景(尤其是小查询)应适当降低执行并行度(executionparallelism),以避免过高的context switch和系统调用CPU开销
  • 给较多的并发数(maxconcurrency)和最大内存(maxmemorysize)
实在无法对负载进行直接区分,但需要更高的吞吐能力
  • 采用资源池级联,让长时间任务在跟低并发的资源池排队,避免“入口”资源池排队,给新进来的小任务执行机会
系统视图
系统表描述
RESOURCE_POOLS所有资源池的参数,包括内建资源池
RESOURCE_REJECTIONS资源请求拒绝情况和拒绝原因
RESOURCE_ACQUISITIONS通过的每个查询资源请求信息
RESOURCE_POOL_STATUS所有资源池的当前状态,包括内存使用情况、正在执行的并发查询数
RESOURCE_QUEUES当前等待队列中的查询,保持资源池和优先级信息
USERS用户关联的资源池信息
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值