统计mysql和pgsql库和表占用大小方式
更新时间:2025年10月31日 09:46:48 作者:学无止境的宝妈
本文介绍了统计数据库和表占用情况的方法,适用于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;

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决MySQL报错:The last packet sent successfu
这篇文章主要介绍了解决MySQL报错:The last packet sent successfully to the server was 0 milliseconds ago问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
php后台经常提示无法连接mysql 刷新后又可以访问的解决方法
这几天有一台MySQL数据库服务器出现了频繁的掉线情况,通过排查,并没有排查出哪个网站被攻击,百思不得其解中的时候,群里有个朋友说是因为微软KB967723造成的,网上搜索了一下,果然很多人都是这样的问题,都是windows系统下安装的MySQL造成的2011-05-05


最新评论