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,即可得到该库的大表列表。

posted on 2026-01-29 08:51  coding博客  阅读(0)  评论(0)    收藏  举报