统计mysql和pgsql库和表占用大小方式
作者:学无止境的宝妈
本文介绍了统计数据库和表占用情况的方法,适用于MySQL 5.7和PostgreSQL 14.x版本,通过SQL查询,可以获取每个库和表的具体大小,帮助评估磁盘使用计划
适用背景
交付项目时,客户需要统计数据库和表占用情况,来评估后续磁盘使用计划。
以下sql对应库的版本,mysql为5.7 pgsql为14.x
mysql
每个库的大小,单位MB
use information_schema; select table_schema,round(sum(data_length/1024/1024),2) as data from tables group by table_schema order by data desc;

具体库下的单表大小,单位MB
use information_schema; select table_name,round(sum(data_length/1024/1024),2) as data from tables where table_schema='db_name' group by table_name order by data desc;

pgsql
每个库的大小,单位MB
SELECT
nspname AS table_schema,
ROUND(SUM(pg_total_relation_size(c.oid)) / 1024.0 / 1024.0, 2) AS total_mb
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
c.relkind = 'r'
GROUP BY
nspname
ORDER BY
total_mb DESC;

统计schema下单表大小,单位MB
SELECT
relname AS table_name,
ROUND(pg_relation_size(c.oid) / 1024.0 / 1024.0, 2) AS data_mb -- 表数据大小(MB)
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
n.nspname = 'schema_name' -- 指定schema名称
AND c.relkind = 'r' -- 只统计普通表
ORDER BY
data_mb DESC;

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
