请教下tidb怎么统计数据库以及对应表,占用磁盘空间的大小?

【TiDB 使用环境】生产环境
【TiDB 版本】8.5.1
【部署方式】私有云
【遇到的问题:问题现象及影响】
请教下,tikv怎么统计每个库以及表占用磁盘空间的大小,最近几天磁盘涨的飞快 :joy:
通过下面这段sql查出来,Disk_Size的大小单位是MB么,但是感觉不太准。。。 :joy:,最大的表也才几十G

SELECT
    db_name,
    table_name,
    ROUND(SUM(total_size / cnt), 2) Approximate_Size,
    ROUND(SUM(total_size / cnt / (SELECT
                    ROUND(AVG(value), 2)
                FROM
                    METRICS_SCHEMA.store_size_amplification
                WHERE
                    value > 0)),
            2) Disk_Size
FROM
    (SELECT
        db_name,
            table_name,
            region_id,
            SUM(Approximate_Size) total_size,
            COUNT(*) cnt
    FROM
        information_schema.TIKV_REGION_STATUS
    WHERE
        db_name = @dbname
            AND table_name IN (@table_name)
    GROUP BY db_name , table_name , region_id) tabinfo
GROUP BY db_name , table_name;

tidb是追加式 插入数据,删除数据磁盘也不会马上释放,直接df -h看更直观
要想清理磁盘,先把saft point调小 ,然后手动compaction应该可以

table_storage_stats

看的字典视图应该不对吧

直接看information_schema.TIKV_REGION_STATUS视图,按压缩比估计

关于这个问题,TiDB的name特性在实际项目中很有价值,特别是在混合负载场景场景下。 希望这个回答对你有帮助!

df -h看下

这样查询有没有包含还没有合并的空间?

同意这种说法, 可以df -h看下

df -h只能看到磁盘总体空间大小,看不到库表的大小。。

du -sh看一下

du -sh 也只能看到文件夹的大小,tidb的库表不是已文件夹的形式存在磁盘上的,我是想要看到具体库表的大小

SELECT
TABLE_SCHEMA AS db_name,
ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2) AS total_gb,
ROUND(SUM(DATA_LENGTH) / 1024 / 1024 / 1024, 2) AS data_gb,
ROUND(SUM(INDEX_LENGTH) / 1024 / 1024 / 1024, 2) AS index_gb
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA NOT IN (‘information_schema’, ‘mysql’, ‘sys’, ‘INFORMATION_SCHEMA’, ‘METRICS_SCHEMA’)
GROUP BY
TABLE_SCHEMA
ORDER BY
total_gb DESC;
用这个sql试试呢

SELECT
TABLE_SCHEMA AS db_name,
TABLE_NAME AS table_name,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2) AS total_gb,
ROUND(DATA_LENGTH / 1024 / 1024 / 1024, 2) AS data_gb,
ROUND(INDEX_LENGTH / 1024 / 1024 / 1024, 2) AS index_gb,
TABLE_ROWS AS row_count  -- 近似行数,辅助判断数据量

FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = ‘your_db_name’
ORDER BY
total_gb DESC;
用这个试试查询表的大小

可以使用TiDB Dashboard查看

dashboard上没有显示库表的大小吧

解决了没,看看相关的logfile是否定期清理

这几个的单位是什么?

单位是GB

这就是最准的单副本容量计算方式,没有更准的了。 可以算下集群整体大小,对比一下数据库目录磁盘使用量。