导入大宽表ColumnReader对象占用太多内存

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】问题详细描述
使用主键模型,从MySQL导入5亿行100列的大宽表到Starrocks,导入过程中发现metadata占用内存较大,调试发现创建了大量ColumnReader对象,不知是否有内存泄露?
【背景】导入数据
【业务影响】OOM
【是否存算分离】否
【StarRocks版本】例如:3.1.11
【集群规模】单机合并部署
【机器信息】80C360G

运行中memory profile如下

image
不知道为什么创建这么多ColumnReader对象,我统计了一下大概有1.7亿个,每个152字节
,同时我的segment大概7000个,tablet200个。另外如果不是内存泄露,那么ColumnReader能不能关闭一些 ,防止占用太多内存。

请大佬们帮忙解答一下,谢谢
@trueeyu @Doni @dongquan

3.1.11 的话可以在 be.conf 中添加 data_page_size=524288 后观察下

导入到StarRocks后大约有多大数据量,show data 看下。用什么方式导入的?

show data显示大概288G,同时我试过dup key和uniq key没有这个问题,只有primary key有问题。我也尝试过关闭value 列的zonemap index,内存会减少一些,但是占用还是比较多。是用streamload导入的,每次导入100MB

[quote=“dongquan, post:2, topic:12815”]
data_page_size
[/quote]。metadata占用的内存没有减少
之前试过把data_page_size改为1M,但是没什么效果

按说Dup和Primary是一样,你当时导入的时候开PersistentIndex了吗,加我下wx?,我们详细沟通下这个问题。这个我们在优化,按说Dup也有这个问题。

dup key占用的内存是最少的,大概8G,uniq key大概20G,primary key 大概100G

我们另一个同事会联系你查下这个问题。

等一段时间(30分钟),内存也不会降下来吗

感谢罗总帮忙解决了这个问题,compation做完后释放内存,亲测有效
Status TabletUpdates::_do_compaction(std::unique_ptr* pinfo)
{
// 4. commit compaction
EditVersion version;
RETURN_IF_ERROR(_commit_compaction(pinfo, *output_rowset, &version));
Rowset::close_rowsets(input_rowsets);
}

@trueeyu @dongquan

1赞