TDengine 3.3.5.0 新功能 —— 查看库文件占用空间、压缩率

发布于:2025-06-30 ⋅ 阅读:(15) ⋅ 点赞:(0)

1. 背景

TDengine 之前版本一直没有通过 SQL 命令查看数据库占用的磁盘空间大小,从 3.3.5.0 开始,增加了这个方便且实用的小功能,这里详细介绍下。

2. SQL 基本语法

select expr from information_schema.ins_disk_usage [where condtion]

行为说明: 查看各个vgroup 的各个组件磁盘占用情况,并且可以通过查询语句计算压缩率等。

示例:

taos> select * from ins_disk_usage where db_name = "test";

db_name|vgroup_id|wal|data1|data2|data3|cache_rdb|table_meta|

s3|raw_data|

=========================================================

test|13 | 112 | 256 | 2000| 3000| 4000| 8000| 9000| 10000

Query OK, 1 row(s) in set (0.003510s)

3. 快捷命令

快捷命令是比较短的可快速查看信息的命令,查看磁盘空间的命令是:

show disk_info;

示例:

taos> show disk_info;

_db_usage               |

=================================

Compress_radio: 23%     |

Disk_occupied: 400M     |

Query OK, 2 row(s) in set (0.013209s)

行为说明: 

  • compression_ratio: 类型为double 类型,代表当前库的压缩率, 如果估算出来 raw_data 的size 小于1k, 则显示为NULL。
  • disk_occupied: 类型为整数类型,代表当前用户数据占用大小。

命令等同于:

select

    sum(data1 + data2 + data3)/sum(raw_data),

    sum(data1 + data2 + data3)

from information_schema.ins_disk_usage

    where db_name="dbname"

4. 新增系统表

本功能需新增系统表,在 information_schema 中新增 ins_disk_usage 表,各字段含义如下:

字段

含义

类型

单位

备注

db_name

Db 的名称

Varchar

准确值

vgroup_id

Vgroup 的ID号

整数类型

准确值

wal

wal 的大小

长整数类型

K

准确值

data1

一级存储上磁盘占用大小

长整数类型

K

同上, 不包含WAL 值

data2

二级存储上磁盘占用大小

长整数类型

K

准确值,不包含WAL值

data3

三级存储上磁盘占用大小

长整数类型

K

准确值,

cache_rdb

last/last_row占用磁盘的大小

长整数类型

K

同上

table_meta

Table Meta 占用磁盘大小

长整数类型

K

同上

s3

s3 上占用的数据的大小

长整数类型

K

相对准确值

raw_data

预估出来的真实数据的大小,不含mem table

长整数类型

k

估算值

5. 性能

命令资源消耗大:

需要到各 vnode 获取其基本磁盘占用、表数量、行数,行数统计等信息,需要读 header block 信息 IO 使用多。

执行时间:

 预估为秒级,性能和 show table distributed stableName 类似, 如果 DB 上超级表或者普通表的数目为 N, 执行单个 show table distributed table 时间为 T,那么执行该查询的时间则为 N * T。

6. 约束和限制

约束: 本质上是一个运维工具, 且资源消耗比较大,不建议频繁调用,

限制:

  • 如果有大量的删表、删数据行为,不能准确计算得到压缩率等信息,需要等到完全compact 完全结束之后,才能得到一个相对准确的压缩率,如果在compact 还没有结束时,查询得到的磁盘占用可能过大。

  • 本实现统计是按实际文件占用进行统计且忽略了目录本身的大小, 因此和用 `du ` 命令直接统计目录的大小存在一定的区别,两者差距一般小于1M。

  • 多副本情况下,只统计单副本的DB的占用大小

  • 如果要统计单个DB 实际的磁盘占用可以用 select sum(data1+data2+data3+wal+cache_rdb + table_meta) from ins_disk_usage where dbname = "test"

  • 文件大小的磁盘占用大小


网站公告

今日签到

点亮在社区的每一天
去签到