kingbase数据查看哪个数据库的哪些表占用的空间最大
Kingbase 中存储表元数据的核心系统表:
sys_class:存储表、索引、视图等对象的基础信息(relkind='r'代表普通表);sys_namespace:存储模式(Schema)信息,避免同名表混淆;sys_database:存储数据库列表(跨库查询时用到);- 核心函数:
sys_relation_size(oid):仅表本身的数据大小(不含索引、TOAST 表);sys_total_relation_size(oid):表的总大小(包含数据、索引、TOAST 表,最常用);pg_size_pretty(字节数):将字节数格式化为易读的单位(KB/MB/GB)。
具体查询方法
1. 单数据库内查询(最常用)
登录目标数据库后,执行以下 SQL,可查询当前库下所有表的空间占用(按总大小降序):
-- 查询当前数据库下各表的空间占用(按总大小从大到小排序)
SELECT
n.nspname AS "模式名(Schema)",
c.relname AS "表名",
pg_size_pretty(sys_relation_size(c.oid)) AS "表数据大小",
pg_size_pretty(sys_total_relation_size(c.oid)) AS "表总大小(含索引/TOAST)",
sys_total_relation_size(c.oid) AS "总大小(字节)" -- 用于精准排序
FROM
sys_class c
JOIN
sys_namespace n ON c.relnamespace = n.oid
WHERE
c.relkind = 'r' -- 仅查询普通表(排除索引、视图、序列等)
AND n.nspname NOT IN ('sys_catalog', 'information_schema') -- 排除系统模式
ORDER BY
sys_total_relation_size(c.oid) DESC;
2. 跨数据库查询(查看所有库的大表)
Kingbase 不支持直接跨库关联查询,需先获取所有数据库名,再逐个查询。步骤如下:
步骤 1:查询所有数据库名
-- 登录任意库(如sysdb)执行,获取所有数据库列表
SELECT datname AS "数据库名" FROM sys_database WHERE datname NOT IN ('template0', 'template1');
步骤 2:逐个登录数据库执行上述单库查询
通过
ksql命令行工具登录目标库:# 登录Kingbase的命令(替换为你的实际信息)
ksql -U 用户名 -d 数据库名 -h 数据库主机 -p 端口号
# 示例:ksql -U sysdba -d mydb -h 127.0.0.1 -p 54321
登录后执行第一步的单库查询 SQL,即可得到该库的大表列表。
浙公网安备 33010602011771号