Starrocks 写入报错 primary key memory usage exceeds the limit

背景

本文基于 StarRocks 3.3.5
单个Starrocks BE配置是 16CU 32GB
在Flink Yaml CDC 任务往 Starrocks写数据的过程中,突然遇到了primary key memory usage exceeds the limit 问题,具体如下:

java.lang.RuntimeException: com.starrocks.data.load.stream.exception.StreamLoadFailException: Transaction prepare failed, db: xxx, table: xxxx, label: flink-960f94fc-6fb1-43e4-aaa1-4c3938241ffa, 
responseBody: {"Status": "MEM_LIMIT_EXCEEDED","Message": "primary key memory usage exceeds the limit. tablet_id: 479203, consumption: 15928614825, limit: 15790082457. Memory stats of top five tablets: 4258582(314M)4258578(272M)4258340(230M)2957546(190M)2957590(190M):  be:xxx.xxx.xxx.xxx"
}
errorLog: nullat com.starrocks.data.load.stream.v2.StreamLoadManagerV2.AssertNotException(StreamLoadManagerV2.java:427)at com.starrocks.data.load.stream.v2.StreamLoadManagerV2.write(StreamLoadManagerV2.java:252)at com.starrocks.connector.flink.table.sink.v2.StarRocksWriter.write(StarRocksWriter.java:143)at org.apache.flink.streaming.runtime.operators.sink.SinkWriterOperator.processElement(SinkWriterOperator.java:182)at org.apache.flink.cdc.runtime.operators.sink.DataSinkWriterOperator.processElement(DataSinkWriterOperator.java:178)at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:75)at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:50)at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)at org.apache.flink.streaming.api.operators.StreamMap.processElement(StreamMap.java:38)at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask$StreamTaskNetworkOutput.emitRecord(OneInputStreamTask.java:245)at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.processElement(AbstractStreamTaskNetworkInput.java:217)at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:169)at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:68)at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:616)at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:231)at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:1071)at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:1020)at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:959)at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:938)at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:751)at org.apache.flink.runtime.taskmanager.Task.run(Task.java:567)at java.lang.Thread.run(Thread.java:879)
Caused by: com.starrocks.data.load.stream.exception.StreamLoadFailException: Transaction prepare failed, db: xxx, table: xxx, label: flink-960f94fc-6fb1-43e4-aaa1-4c3938241ffa, 
responseBody: {"Status": "MEM_LIMIT_EXCEEDED","Message": "primary key memory usage exceeds the limit. tablet_id: 479203, consumption: 15928614825, limit: 15790082457. Memory stats of top five tablets: 4258582(314M)4258578(272M)4258340(230M)2957546(190M)2957590(190M):  be:xxx.xxx.xxx.xxx"
}
errorLog: nullat com.starrocks.data.load.stream.TransactionStreamLoader.prepare(TransactionStreamLoader.java:221)at com.starrocks.data.load.stream.v2.TransactionTableRegion.commit(TransactionTableRegion.java:247)at com.starrocks.data.load.stream.v2.StreamLoadManagerV2.lambda$init$0(StreamLoadManagerV2.java:210)... 1 more

除此之外,我们的业务场景就是会 更新 以往 的历史数据,且这样类似的任务有很多。我们的表结构是主键表。

分析

上述报错,其实是BE报出来的,每次进行数据更新的时候,SR都会加载对应的tablet对应的主键索引,导致我们这边的BE占用的内存比较大,如下所示:
在这里插入图片描述

。经过分析我发现我们这边的分区是以月维度划分的,而且bucket的个数为2,这样每次写入数据的时候,就会把一个月的的数据的索引加载到内存中,这样就会导致BE的内存占用越来越大,

PARTITION BY date_trunc("month",created_time)
DISTRIBUTED BY HASH(xxx) BUCKETS 2

所以我们进行了bucket调整,

ALTER TABLE xxxx DISTRIBUTED BY HASH(xx) BUCKETS 50;

调整之后,对比了一下BE所占用的内存,如下:
在这里插入图片描述

内存占用节约了5GB。

其他

可以通过如下命令查看 索引所占用的内存

curl -XGET -s http://BE:8040/metrics | grep  "update_mem_bytes"curl -XGET -s http://BE:8040/metrics |grep 'update_primary_index_bytes_total'

具体的指标参考:StarRocks metrics

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django:文件上传时报错in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.

即:使用Content-Security-Policy 1.安装Django CSP中间件: pip install django-csp 2.更改项目配置: # settings.py MIDDLEWARE [...csp.middleware.CSPMiddleware,... ]CSP_DEFAULT_SRC ("self",) CSP_FRAME_ANCESTORS (&q…

利用Adobe Acrobat 实现PPT中图片分辨率的提升

1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考:https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中,然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…

【Python爬虫】爬取公共交通路网数据

程序来自于Github,以下这篇博客作为完整的学习记录,也callback上一篇爬取公共交通站点的博文。 Bardbo/get_bus_lines_and_stations_data_from_gaode: 这个项目是基于高德开放平台和公交网获取公交线路及站点数据,并生成shp文件,…

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4,分块尺寸768px★★★★★☆皮肤纹理细腻,但高对比场景易出现…

VUE_使用Vite构建vue项目

创建项目 // 安装vite npm install vite// 创建名为vite-app的项目 npm create vite vite-app --template vue// 到项目目录 cd vite-app// 安装依赖 npm install// 运行项目 npm run dev// 打包 npm run build// 打包预览 npm run serve 增加路由 // 安装路由 npm add vue-r…

ctf网络安全赛题

CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展…

【朝夕教育】《鸿蒙原生应用开发从零基础到多实战》004-TypeScript 中的泛型

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…

性能测试监控工具jmeter+grafana

1、什么是性能测试监控体系? 为什么要有监控体系? 原因: 1、项目-日益复杂(内部除了代码外,还有中间件,数据库) 2、一个系统,背后可能有多个软/硬件组合支撑,影响性能的因…

互联网时代如何保证数字足迹的安全,以防个人信息泄露?

用户在网络上所做的几乎所有事情,包括浏览、社交媒体活动、搜索查询、在线订阅,甚至购物,都会留下一条数据线索,这些数据可用于创建用户在线身份的详细档案。如果这些信息暴露,恶意行为者可能会利用它们将用户置于各种…

C# IEquatable<T> 使用详解

总目录 前言 在 C# 开发中&#xff0c;IEquatable<T> 是一个泛型接口&#xff0c;用于定义类型的相等性比较逻辑。通过实现 IEquatable<T>&#xff0c;可以为自定义类型提供高效的、类型安全的相等性比较方法。本文将详细介绍 IEquatable<T> 的使用方法、应…

web第四天

Dom操作元素 innerText、innerHTML、value(input and textarea用到) 更改属性&#xff0c;样式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

LabVIEW基于IMAQ实现直线边缘检测

本程序基于 NI Vision Development 模块&#xff0c;通过 IMAQ Find Straight Edges 函数&#xff0c;在指定 ROI&#xff08;感兴趣区域&#xff09; 内检测多条直线边缘。用户可 动态调整检测参数 或 自定义ROI&#xff0c;实时观察识别效果&#xff0c;适用于 高精度视觉检测…

费曼学习法13 - 数据表格的魔法:Python Pandas DataFrame 详解 (Pandas 基础篇)

第二篇&#xff1a;数据表格的魔法&#xff1a;Python Pandas DataFrame 详解 (Pandas 基础篇) 开篇提问&#xff1a; 回忆一下&#xff0c;我们上一篇文章学习了 Pandas 的一维数据结构 Series&#xff0c;它可以看作是带 “标签” 的列表。 但现实世界中的数据&#xff0c;…

一周学会Flask3 Python Web开发-在模板中渲染WTForms表单视图函数里获取表单数据

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 为了能够在模板中渲染表单&#xff0c;我们需要把表单类实例传入模板。首先在视图函数里实例化表单类LoginForm&#xff0c;然…

小红书湖仓架构的跃迁之路

作者&#xff1a;李鹏霖(丁典)&#xff0c;小红书-研发工程师&#xff0c;StarRocks Contributor & Apache Impala Committer 本文整理自小红书工程师在 StarRocks 年度峰会上的分享&#xff0c;介绍了小红书自助分析平台中&#xff0c;StarRocks 与 Iceberg 结合后&#x…

数据结构第五节:排序

1.常见的排序算法 插入排序&#xff1a;直接插入排序、希尔排序 选择排序&#xff1a;直接选择排序、堆排序 交换排序&#xff1a;冒泡排序、快速排序 归并排序&#xff1a;归并排序 排序的接口实现&#xff1a; // 1. 直接插入排序 void InsertSort(int* a, int n); // 2. 希…

BambuStudio学习笔记:FaceDetector类

面检测器类解析 这段代码定义了一个名为 FaceDetector 的 C 类&#xff0c;用于处理三维模型中的面检测。以下是该类的具体说明&#xff1a; 头文件保护 #ifndef slic3r_FaceDetector_hpp_ #define slic3r_FaceDetector_hpp_这部分代码防止头文件被多次包含。 命名空间声明…

C++发展

目录 ​编辑C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&a…

LeetCode 21. 合并两个有序链表(Python)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[] 示例 3&#xff1a; 输…

FPGA 配置原理

用户编程控制的FPGA 是通过加载比特位流配置内部的存储单元实现的。该存储单元就是所谓的配置单元&#xff0c;它必须在器件上电后进行配置&#xff0c;从而设置查找表&#xff08;LUT&#xff09;的属性、连线方式、IOB 电压标准和其它的用户设计。 1.配置帧 以Xilinx 公司的…