TDengine 目前只提供统计超级表占用空间的工具:
- 2.x 版本使用
select _block_dist() from STABLE_NAME
- 3.x 版本使用
show table distributed STABLE_NAME
但以上的统计结果并不准确。
如果想统计 DB 使用的空间,只能通过统计所属 vnode 占用空间进行统计。
以下脚本可以实现自动统计所在节点所有数据库的大小。
使用方法:
[root@test ]# mkdir dbsize
[root@test ]# cd dbsize
[root@test dbsize]# sh dbsize.sh
db01 0.209675 GB
backtrade 0.282856 GB
db11 0.022892 GB
log 0.163288 GB
audit 0.0711403 GB
注意:
- 需要根据实际环境配置用户名和密码
- 脚本会生成一系列临时文件,最好放在单独目录内执行
- 脚本兼容2.x和3.x版本
- 如果只想统计数据文件大小,可以将24行中
xargs du -s
修改为xargs -I {} du -s {}/tsdb
脚本实现逻辑:
- 通过 taos 命令获取数据库列表,将结果存储到 dblist.tmp 文件中
- 清理 dblist.tmp 文件中可能存在的Windows 换行符(^M),并将结果排序后保存到 dblist 文件中。
- 遍历每个数据库,通过 taos 命令获取该数据库中每个vgroup 的信息,将结果存储到 ${db}.vglist 文件中。
- 清理 ${db}.vglist 文件中可能存在的 Windows换行符。
- 遍历 ${db}.vglist 文件中的每个 vgroup,通过查找文件夹大小的方式计算每个 vgroup 的大小,并将结果存储到 ${db}.size 文件中。
- 输出每个数据库的总大小,即各个 vgroup 的大小之和。
脚本内容如下:
#!/bin/sh
user=root
pass=taosdatataos -u${user} -p${pass} -s "show databases\G"|grep 'name:' |awk '{print $NF}' |grep -v '_schema'> dblist.tmp
#echo "Get DBlist Done!"
cat -v dblist.tmp | sed 's/\^M//g' |sort -n>dblist
rm -f dblist.tmp
cat dblist |while read db
dotaos -u${user} -p${pass} -s "show ${db}.vgroups\G"|grep -E 'vgId|vgroup_id'|awk '{print $NF}' >${db}_vg.tmpcat -v ${db}_vg.tmp | sed 's/\^M//g' >${db}.vglistrm -f ${db}_vg.tmp#echo "Get ${db} vglist Done!"if [ -s ${db}.vglist ]thenecho > ${db}.sizecat ${db}.vglist|while read viddofor ddir in $(grep -i datadir /etc/taos/taos.cfg|grep -v '#'|awk '{print $2}')doif [ -d ${ddir}/vnode/vnode${vid} ]thenvgsize=$(find ${ddir} -type d -name "vnode${vid}" |xargs du -s |awk '{print $1}')echo "${db}.vnode${vid} ${vgsize}" >>${db}.sizefidonedoneecho "${db} $(cat ${db}.size|awk '{sum+=$2} END {print sum/1024/1024 " GB"}')"fi
done