Trino Worker 规避 OOM 思路
背景
Trino 集群如果不做任何配置优化,按照默认配置上线,Master 和 Worker 节点都很容易发生 OOM。本文从 Trino 内存设计出发, 分析 Trino 内存管理机制,到限制与优化内存分配,使 Worker 节点不易发生 OOM。
Trino 内存类型
Trino(version 400)只有一个内存池,由 Coordinator 来管理这个内存池,即管理集群内存。
Coordinator 协调员一般为集群 Master 节点,Master 节点负责 SQL 解析、分析、优化以及分配查询 Task 给 Worker 节点;Worker 节点负责处理 Task,主要为 load 数据和计算数据,这也是集群内最吃资源的一块。所以我们也是针对这块进行优化处理。
Trino 内存管理机制
Trino 会每 2s 做一次内存分析:
- 分析当前集群内存是否溢出
- 当前内存集群内存溢出:Trino 会检查当前集群内存溢出的持续时间,如果持续时间超过了预设值(默认5min),则会根据配置好的 Kill Query策略去 Kill 掉查询。
- query-low-memory-killer-policy:
- none :不会杀死任何查询
- total-reservation :终止当前使用最多总内存的查询。
- total-reservation-on-blocked-nodes:终止当前在内存不足的节点上使用最多内存的查询
- query-low-memory-killer-policy:
- 当前内存集群内存溢出:Trino 会检查当前集群内存溢出的持续时间,如果持续时间超过了预设值(默认5min),则会根据配置好的 Kill Query策略去 Kill 掉查询。
- 分析当前时刻的所有查询是否超出了预设的内存上限
- 分析查询是否超出了 query.max-memory-per-node / query.max-memory / query.max-total-memory,超出则 kill 掉
- 这里 kill 掉查询的动作是有等待时间的。Trino 默认设置是等待5分钟,5分钟后集群依旧是oom状态才会去 kill 掉查询,可以设置 query.low-memory-killer.delay 值来减少等待时间。
以上的内存管理是针对 query 的,不针对 master 节点解析SQL、分析、优化和调度的操作
Trino 资源组限制内存
Trino 资源组也可以限制用户使用内存
主要是通过 softMemoryLimit 限制内存的使用。
官方文档
softMemoryLimit (required): maximum amount of distributed memory this group may use, before new queries become queued. May be specified as an absolute value (i.e. 1GB) or as a percentage (i.e. 10%) of the cluster’s memory.
意思是:在每个查询开始之前,会判断当前用户组使用集群的内存情况,如果超过了设定值,则在队列内等待。直至该用户组使用集群内存降下到预设值。
如:下面配置的意思是,所有的用户都属于admin组,admin组限制了在集群内最高并发50条查询,最长等待队列是300;当admin使用集群内存超过80%时,查询需要在队列中等待。
{
"rootGroups": [
{
"name": "admin",
"softMemoryLimit": "80%",
"hardConcurrencyLimit": 50,
"maxQueued": 300,
}
],
"selectors": [
{
"user": ".*",
"group": "admin"
}
]
}
优化思路:
- 配置每个查询的使用的内存上限
a. query.low-memory-killer.delay = 4GB
b. query.max-memory = 8GB
c. query.max-memory = 8GB - 降低当集群内存不足时, 降低 Trino kill query 的等待时间和 kill 查询的策略
a. query.low-memory-killer.delay = query.low-memory-killer.delay
b. query.low-memory-killer.delay = 10s - 配置资源组,避免当集群内存负载高时插入新查询
- 开启 spill 选项,允许内存 load 到磁盘
通过以上配置,Trino Worker 就能变得稳定起来。另外可以通过 event listen 机制收集并持久化 query 日志,观察和分析 Trino 压力与瓶颈,从而针对性提升 Trino 的性能。Trino 调优我觉得是很艰难的一件事,我一步步摸索着过来,路漫漫而远兮,吾将上下而求索。
Trino Worker 规避 OOM 思路的更多相关文章
- Presto 在字节跳动的内部实践与优化
在字节跳动内部,Presto 主要支撑了 Ad-hoc 查询.BI 可视化分析.近实时查询分析等场景,日查询量接近 100 万条.本文是字节跳动数据平台 Presto 团队-软件工程师常鹏飞在 Pre ...
- Android应用性能优化(转)
人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- android开发性能分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- [转帖]分布式Unique ID的生成方法一览
分布式Unique ID的生成方法一览 http://www.importnew.com/22211.html 分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结 ...
- apache 运行一段时间出现错误
环境是win2008,apache 2.4.29 Win64 VC15,php 7.1.10(7.1.11).事件完整内容: “-------------------------- 错误应用程序名称: ...
随机推荐
- 在django中前后端传输数据的编码格式(contentType)
写在前面 在django中,针对前后端传输数据的编码格式,我们主要研究的是post请求:因为get请求传输的数据往往是直接放在url的后面的!如: url?username=zhang&pas ...
- LINUX下基于NVIDIA HPC SDK 的 VASP6.3.x编译安装报错整理
关于gcc 用旧版本安装NVIDIA HPC SDK再编译会报错: "/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/move.h" ...
- 人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11
人非圣贤,孰能无过,有则改之,无则加勉.在编程语言层面,错误处理方式大体上有两大流派,分别是以Python为代表的异常捕获机制(try....catch):以及以Go lang为代表的错误返回机制(r ...
- Java注解最全详解(超级详细)
Java注解是一个很重要的知识点,掌握好Java注解有利于学习Java开发框架底层实现.@mikechen Java注解定义 Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称 ...
- java学习第四天高级数组.day13
正则表达式 冒泡排序 二分法查找 线性查找:从头找到尾,性能比较低. 二分法查找(折半查找):前提数组元素是有序的,性能非常优异. Arrays
- jsp获取下拉框组件的值
jsp获取下拉框组件的值 1.首先,写一个带有下拉框的前台页 1 <%@ page language="java" contentType="text/html; ...
- 【java】IDEA-jar包导出与导入
导出步骤: 1.CTRL + SHIFT + ALT + S 2.选择:Artifacts ,点击"+",在添加页面中选择:JAR-From modules with depend ...
- 第五篇:vue.js起步
<div id="vue_det"> //使改动全部在指定的 div 内,div 外部不受影响 <h1>site : {{site}}</h1> ...
- zabbix_agentd断断续续端无法访问问题记录
问题现象: zabbix监控上出现zabbix_agentd无法访问,但是实际上zabbix_agentd是存活状态 每隔一段时间就会出现这样的情况 问题原因 zabbix_agentd端任务较多,活 ...
- KingbaseES R6 集群“双主”故障解决案例
实际工作中,可能会碰到集群脑裂的情况,在脑裂时,会出现双 primary情况.这时,需要用户介入,人工判断哪个节点的数据最新,减少数据丢失. 一.测试环境信息 操作系统: [kingbase@node ...