DATA_LENGTH 查询表占用大小是否准确

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】:select concat(round(sum(DATA_LENGTH/1024/1024),2),‘MB’) as data from TABLES where table_schema=‘test’ and table_name=‘pow’; 这个查询的几个副本占用的磁盘大小,还有这个查出来的大小是否为真实的磁盘占用,如果不是,该怎么查

你好,

此方式查出的磁盘占用量是 不准确的,tikv 中存储数据为 kv 对,所以在 tidb 中无 table 概念,存储数据对应的是 region,size 可以通过以下方式查看
https://pingcap.com/docs-cn/stable/sql-statements/sql-statement-show-table-regions/#show-table-regions

你好,这个查出来是三副本的大小吗

指的这一个 region 的大小

所以是表示所有数据吗,还是一个副本,本人愚钝还望告知,给个文档也行

@Sky-zzt 抱歉,我们尽快完善下这个文档,官方文档对这些系统表的描述的确不明确,我们尽量本周内完善这些文档。

TABLES 中的 DATA_LENGTH 字段含义是用统计信息估算的行数*各列数据长度总和的理论大小,例如表 t 有 a bigint, b varchar(100) 两列,并有 index idx(a),假如统计信息估算该表有 1000 行,那么表 t 对应的 DATA_LENGTH 计算方式如下:

DATA_LENGTH = 1000 * (8 + column_b_length + 8)

其中第一个 8 是列 a 的长度,为 8 字节,第 2 个 8 是索引idx 的长度, column_b_length 是 b 列值在统计信息中的估算大小。

如果统计信息是准确的,可以认为 DATA_LENGTH 是表 t 的理论数据大小,并非是实际占用磁盘的大小,这里并没有考虑3副本,以及底层 TiKV 存储 kv 时会采用压缩算法。

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。