【详述】我使用一个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)