Sysbench做完压测200万后,开启TIFLASH占用空间大,不是列式存储更节约空间吗

Sysbench做完压测后,会产生16张表,每张表200万数据
我将其中一张表sbtest1修改为2副本的TIFLASH,发现TIKV存储的表大小竟然比TIFLASH还要小
ALTER TABLE sbtest.sbtest1 SET TIFLASH REPLICA 2

完成TIFLASH处理后,具体数据如下
TIFLASH空间占用情况
SELECT * FROM INFORMATION_SCHEMA.TIFLASH_TABLES where tidb_table=‘sbtest1’;

TIKV空间占用情况
select * from INFORMATION_SCHEMA.TABLES where table_name=‘sbtest1’;

TIKV的占用(不确定是但副本还是全部副本)是:398111699,TIFLASH单副本是:443935739,对应的TOTAL_STABLE_SIZE_ON_DISK竟然达到:763002984

@Hacker_FgGJZfZV , 你好

TiFlash 目前只在数据类型是 数字 的情况下有压缩优势,在字符串类型下和 tikv 应该差不多的(甚至可能比 tikv 要大一些)。你这里 sysbench 数据都是字符串,所以是正常情况。

TOTAL_STABLE_SIZE_ON_DISK 的统计会存在误差,可能会比TOTAL_SIZE 大。原因是有些 segment 是逻辑分裂,导致数据被统计了两次。可以导出下面完整 text 结果确认一下

SELECT * FROM INFORMATION_SCHEMA.TIFLASH_TABLES where tidb_table='sbtest1'; 

SELECT * FROM INFORMATION_SCHEMA.TIFLASH_SEGMENTS where tidb_table='sbtest1';

SELECT * FROM INFORMATION_SCHEMA.TIFLASH_TABLES where TIDB_DATABASE=‘sbtest’ AND tidb_table=‘sbtest1’;

下面这句话查出来的是2台机器上的TIFLASH,前2条是其中一台机器的结果,后两条是另外一台机器的结果
SELECT * FROM INFORMATION_SCHEMA.TIFLASH_SEGMENTS where TIDB_DATABASE=‘sbtest’ AND tidb_table=‘sbtest1’;

第一台机器上,应该就是重复统计了,两个 segment 的 STABLE_SIZE_ON_DISK 一模一样。这只会影响统计结果,实际磁盘使用量没有影响。
第二台机器,其中一个 segment 也是逻辑分裂后,统计结果不准确的问题。另外一个 segment 由于新的数据写入,已经整理过数据了。

逻辑分裂指的是,segment A 分裂成 B 和 C,并且 B 和 C 分别指向之前的数据文件,没有重新生成自己的数据文件。所以会存在 B 和 C 重复统计不属于自己部分的数据大小。我们后面会修复这个问题,让统计结果更准确。