column_metadata 内存居高不下

啥版本,表结构是么样的。

版本 3.1.10

8亿行的表结构大概如下:
CREATE TABLE task_info (
id int(11) NOT NULL,
/**** 其余74行,有varchar和binint这些 ***/
) ENGINE=OLAP
PRIMARY KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 218
PROPERTIES (
“replication_num” = “1”,
“in_memory” = “false”,
“enable_persistent_index” = “true”,
“replicated_storage” = “true”,
“compression” = “LZ4”
);

请问一下,能在导入的时候完一张表之后,主动卸载掉column_metedata吗?

你上面那个图没截全吧,还有几条没显示?

image

grep 下_mem_bytes

你单个BE多大数据量

starrocks_be_bitmap_index_mem_bytes 0

TYPE starrocks_be_bloom_filter_index_mem_bytes gauge

starrocks_be_bloom_filter_index_mem_bytes 0

TYPE starrocks_be_chunk_allocator_mem_bytes gauge

starrocks_be_chunk_allocator_mem_bytes 360975136

TYPE starrocks_be_clone_mem_bytes gauge

starrocks_be_clone_mem_bytes 0

TYPE starrocks_be_column_metadata_mem_bytes gauge

starrocks_be_column_metadata_mem_bytes 104903112614

TYPE starrocks_be_column_pool_mem_bytes gauge

starrocks_be_column_pool_mem_bytes 0

TYPE starrocks_be_column_zonemap_index_mem_bytes gauge

starrocks_be_column_zonemap_index_mem_bytes 35749623398

TYPE starrocks_be_compaction_mem_bytes gauge

starrocks_be_compaction_mem_bytes 16957568

TYPE starrocks_be_consistency_mem_bytes gauge

starrocks_be_consistency_mem_bytes 0

TYPE starrocks_be_datacache_mem_bytes gauge

starrocks_be_datacache_mem_bytes 0

TYPE starrocks_be_load_mem_bytes gauge

starrocks_be_load_mem_bytes 1383332216

TYPE starrocks_be_metadata_mem_bytes gauge

starrocks_be_metadata_mem_bytes 126837838367

TYPE starrocks_be_ordinal_index_mem_bytes gauge

starrocks_be_ordinal_index_mem_bytes 19157805472

TYPE starrocks_be_process_mem_bytes gauge

starrocks_be_process_mem_bytes 207517903856

TYPE starrocks_be_query_mem_bytes gauge

starrocks_be_query_mem_bytes 121907544

TYPE starrocks_be_rowset_metadata_mem_bytes gauge

starrocks_be_rowset_metadata_mem_bytes 5615606267

TYPE starrocks_be_schema_change_mem_bytes gauge

starrocks_be_schema_change_mem_bytes 0

TYPE starrocks_be_segment_metadata_mem_bytes gauge

starrocks_be_segment_metadata_mem_bytes 16318015013

TYPE starrocks_be_segment_zonemap_mem_bytes gauge

starrocks_be_segment_zonemap_mem_bytes 13610421714

TYPE starrocks_be_short_key_index_mem_bytes gauge

starrocks_be_short_key_index_mem_bytes 8050

TYPE starrocks_be_storage_page_cache_mem_bytes gauge

starrocks_be_storage_page_cache_mem_bytes 458851232

TYPE starrocks_be_tablet_metadata_mem_bytes gauge

starrocks_be_tablet_metadata_mem_bytes 1104473

TYPE starrocks_be_tablet_schema_mem_bytes gauge

starrocks_be_tablet_schema_mem_bytes 11641

TYPE starrocks_be_update_mem_bytes gauge

starrocks_be_update_mem_bytes 47417722549

BE规格 单机部署 32U 256G,磁盘 15T,想导入30T数据。

当前BE已经有多少T数据了

修改be.conf data_page_size=1048576,重新导入,试试

好的,感谢。目前be的配置。
我的BE配置如下:
tablet_max_versions = 5000
update_compaction_size_threshold=67108864
update_compaction_check_interval_seconds=2
update_compaction_num_threads_per_disk=16
update_compaction_per_tablet_min_interval_seconds=120
cumulative_compaction_num_threads_per_disk = 8
base_compaction_num_threads_per_disk = 8
cumulative_compaction_check_interval_seconds = 2
flush_thread_num_per_store = 16
enable_pindex_read_by_page=true
enable_parallel_get_and_bf=false
disable_column_pool = true
transaction_publish_version_worker_count=64
transaction_apply_worker_count=64

关于您的上一个问题:BE已经有多少数据了?每次我都是把数据都删除干净了,开始导入的,发现一直失败。

为啥要改这些配置?

你是什么方式导入的啊?

我用的是stream_load,通过httpput的方式持续导入数据。16个线程,每个线程到达90M就提交一次。
FE也是单机,规格是16U64G。
这些配置是一点点测出来的,之前遇到过导入版本数过高,或者导入时间越来越大等问题,都是通过这些参数解决的。

导入了多大数据量开始出内存高的问题的?

这些配置太恐怖了。。。

您好,之前的测试大概导入10T左右的数据之后,256G的内存就使用了80%。

经过这几天的测试,发现metadata会保存很多必要的信息在内存中,并且不卸载掉,目前看只能通过重启才能卸载掉metadata占用的内存。
因此:对于大宽表 高速率的数据导入,我们采取了尽量减少在导入过程中metadata中不必要的信息生成,所以

  1. 把enable_pk_value_column_zonemap=false参数关闭了,这样内存中metadata会小很多;
  2. 把buckets的数量降低了,以前1t需要130个buckets,现在改成了75个,这个也显著降低了metadata在内存中的占用;
  3. 然后经过上面两个调整之后,内存的消耗比以前好了非常多,但是30T的数据导入,256G还是不够,因此我们又通过脚本在适当的时候重启be,然后再fe侧提高数据导入的重试时间。

经过上面的调整:现在30T的数据,已经导入完成。


还有两个问题,想请教您:

  1. 经过分析metadata的内存占用,目前发现starrocks_be_column_metadata_mem_bytes为metadata的主要内存消耗,并且在内存中一直卸载不掉。所以请问您:这个指标的计算逻辑是什么,以便可以继续分析下去,然后就是是否有参数能让这块内存卸载掉。
    image

  2. 通过这几天的研究,在网上找了很多关于主键模型的介绍,但是对主键模型的存储结构的介绍,基于已有的资料,没办法做全局的了解。partition,tablet,rowset,segment之间的关系,segment里面的细节,没有找到更为详细的介绍。您能提供一下相关的更为详细的介绍吗?发我邮箱也行感谢。
    我能找到的比较好的材料:
    StarRocks 技术内幕 | 基于全局字典的极速字符串查询_starrocks字典抽取工具-CSDN博客
    【已结束】 StarRocks x RisingWave 构建简单高效的实时数据分析 - :tv: StarRocks 社区活动 - StarRocks中文社区论坛 (mirrorship.cn)

inc_rowset_expired_sec=1800 ->180
tablet_rowset_stale_sweep_time_sec=1800 -> 180

be.conf这两个调小试试,

你们怎么规避的这个问题?