【 TiDB 使用环境`】测试环境
【 TiDB 版本】v6.1.0
【遇到的问题】
TiDB数据库,导入100W数据,文件系统占用体积增长了20GB,数据量和对应文件体积太过悬殊。
而相同数据量,MySQL数据库的文件体积只用两1.5GB。
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
TiDB数据库,导入100W数据,文件系统占用体积增长了20GB,数据量和对应文件体积太过悬殊。
而相同数据量,MySQL数据库的文件体积只用两1.5GB。
TiDB的社区版本,使用文件系统存储数据,文件存储密度太低,文件体积增长太快。
【附件】
TiDB 单节点伪集群,数据文件系统占用大小
TiDB单节点伪集群,实际插入数据行数100W
表结构,字段很少,一行数据体积也不大
TiDB单节点伪集群,信息如下
首先要考虑多副本,比如默认3副本那就要放大3倍空间。然后要考虑MVCC多版本,它不像MySQL是用undo来实现的,TiDB中同一行数据的不同版本,在RocksDB中都是不同的KV对,需要等待GC去删除旧的快照数据,删除后空间会有所下降。最后还要考虑RocksDB的7层LSM Tree结构的空间放大,大约是1.12倍。
1 个赞
谢谢你的解答,有没有官方教材,如何优化配置TiDB数据库的数据库文件体积压缩比和缩小存储。
因为100W的数据量,存储文件系统占用了20GB,这个实在是无法在生产环境使用。
还是我按照官网配置教材部署的,中间有啥遗漏吗?
xfworld
(魔幻之翼)
6
那只是一个验证而已,如果要做 POC,要参考官方提供的配置要求
另外你提到的其他的资料,官方文档中都有详细的描述,但是十分多,要看完需要花比较多的时间和精力
1 个赞
谢谢你的热心回复,我就有一个疑问,大伙实际生产使用中,如果按照三副本等方式存储TiDB数据,
会有我上面实验数据100W条,在TiDB数据库文件系统中占用20GB的情况吗?
这个是否是TiDB自身社区版本的特性呢?还是我配置有误?
在单机上模拟部署生产环境集群
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb#在单机上模拟部署生产环境集群
备注:我测试环境,用的虚拟8vCPU, 36GB内存,320GB SSD。
我也是单机配置过3副本TiKV+1TiFlash加其他默认配置的东西,插入几十万条数据,然后看所有region总大小应该也差不多1~2个G,文件增加的占用大概是3~4G,但是文件夹总大小在集群启动之后自然增加了50多G;
部署前文件夹大小
部署集群
启动集群后
按照https://docs.pingcap.com/zh/tidb/dev/sql-statement-show-table-regions插入测试数据
可以看到大概4个region,每个大小约100MB,算上3副本,总大小应该1.2G左右
现在文件系统占用增加了3GB
1、可以等GC触发并执行过compaction过后,再去关注文件体积
2、可以用如下脚本估算一下表在TiDB中的大小
https://docs.pingcap.com/zh/tidb/stable/manage-cluster-faq#如何预估-tidb-中一张表的大小
3、可以通过调整如下参数控制RocksDB每层使用的压缩算法,不过一般不太建议去调整
https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file#compression-per-level
4、可以在Grafana上PD -> Statistics - Balance页面的Size amplification图上看到空间放大率