主键模型表索引文件过大,硬盘空间占用异常

【详述】我使用一个4 be节点的starrocks集群,每个be节点配置1TB硬盘空间,共4TB。我们的表基本上是主键模型表,一部分使用自增id做主键,一部分字符串组合作为联合主键。我导入1+TB数据到集群进行测试,结果数据还没导完,硬盘空间却快用光了。
通过show backends,查看be的统计信息,发现单个be节点统计到的DataUsedCapacity数据大小是395.061 GB,结果硬盘空间却占用了849GB(TotalCapacity:1007.804 GB - AvailCapacity: 158.213 GB)。
登陆到机器,统计数据目录的文件的大小分布,dat文件: 411.1 GB, index.l0 : 53.54 GB, index.l1 : 329.34 GB, 索引文件总大小382.88 GB。数据文件:索引文件比例达到1:0.93,基本上1GB数据,要额外占用0.93GB空间用于创建索引。索引文件太了,应用失败成本过高,希望可以优化索引文件的空间占用。

【背景】搭建测试集群,建表、导数后发现主键模型的索引文件空间占用过大,严重侵占硬盘空间。
【业务影响】储存成本过高。
【StarRocks版本】 2.5.5 [24c1eca]
【集群规模】例如:3fe(1 follower+2observer)+4be(fe,be独立部署)
【机器信息】8C/64G/千兆
【联系方式】社区群4-乐枫
【附件】
建表语句:
CREATE TABLE my_table (
key1 varchar(128) NOT NULL COMMENT “”,
date date NOT NULL COMMENT “”,
key2 varchar(32) NOT NULL COMMENT “”,
i1 int(11) NULL COMMENT “”,
i2 int(11) NULL COMMENT “”,
s1 varchar(128) NULL COMMENT “”,
s2 varchar(128) NULL COMMENT “”,
s3 varchar(128) NULL COMMENT “”,
s4 varchar(128) NULL COMMENT “”,
s5 varchar(128) NULL COMMENT “”,
s6 varchar(128) NULL COMMENT “”,
bi1 bigint(20) NULL COMMENT “”,
bi2 bigint(20) NULL COMMENT “”,
bi3 bigint(20) NULL COMMENT “”,
d1 decimal128(20, 8) NULL COMMENT “”,
d2 decimal128(20, 8) NULL COMMENT “”,
d3 decimal128(20, 8) NULL COMMENT “”,
d4 decimal128(20, 8) NULL COMMENT “”,
dt1 datetime NULL COMMENT “”
) ENGINE=OLAP
PRIMARY KEY(key1, date, key2)
COMMENT “OLAP”
PARTITION BY RANGE(date)
(
START (“2023-01-01”) END (“2023-12-31”) EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(key2, date) BUCKETS 12
PROPERTIES (
“replication_num” = “2”,
“dynamic_partition.enable” = “true”,
“dynamic_partition.time_unit” = “DAY”,
“dynamic_partition.time_zone” = “Asia/Shanghai”,
“dynamic_partition.start” = “-100”,
“dynamic_partition.end” = “3”,
“dynamic_partition.prefix” = “p”,
“dynamic_partition.history_partition_num” = “0”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“enable_persistent_index” = “true”,
“compression” = “LZ4”
);
tablet.txt (1.2 MB)

收到 这个问题挺严重的 我们安排研发同学跟进,请稍等,麻烦留下您的微信,企业微信,飞书的联系方式,谢谢!

@U_1685083472855_8154 集群总计有几张主键表,有几张表开启了持久化索引?提供下每张开启持久化索引的表的总行数,主键的平均长度?

112张主键表,全部都开启了持久化索引。相应表的行数和平均长度可以参考附件
primary_table_stat.xlsx (12.0 KB)

你们可以通过Starrocks社区群4-乐枫,这个账号联系到我

image
@U_1685083472855_8154 加不了您,麻烦您加一下我 梁超华,谢谢!

我大概估算了下,这112张主键表的索引文件所需的磁盘空间确实和实际统计差不多,核心问题主要应该是索引是没有做压缩的,数据是有做压缩的。你看下有没有哪些数据量大(行数多)的主键表的主键,是否可以改下主键类型,或者减少主键列,减少下索引文件的大小?

Key是什么样的,可以给两条数据看看吗?

我们表里一般3个主键,一个日期,用于做分区,一个账号用于加速查询,一个是md5计算的唯一键。如果计算结果就是要这么大,可以把账号主键去了,单独设索引。md5文本可以尝试改为数字类型的hash.

用 murmur_hash3_32计算hash保证不了唯一性

您好 请问怎么查看主键模型索引占用的磁盘大小呀

请问,这个问题有解决么