更新时间:2025-05-29 GMT+08:00
如何评估当前表/库空间膨胀比
- 方法一:如果条件允许,可以通过 INSERT INTO SELECT 将表的数据全量导入到新表,根据新旧表的大小估算空间膨胀比。示例如下:
gaussdb=# create table t4(like t3); CREATE TABLE gaussdb=# insert into t4 select * from t3; INSERT 0 85376 gaussdb=# select pg_table_size('t3'::regclass) / pg_table_size('t4'::regclass); ?column? ------------------ 7.87027797576622 (1 row)
- 方法二:使用 \d 查看表结构,估算元组的平均长度,再乘以活元组数来估算表的占用空间。膨胀比 ≈ 表大小 / (活跃行数 * 单行平均长度)。单行平均长度 ≈ 各列长度之和 + 行指针长度(4B) + 元组头长度(24B)。活跃行数可以使用 COUNT(*) 或函数 pg_stat_get_live_tuples 获取。
gaussdb=# select pg_table_size('t3'::regclass); pg_table_size --------------- 90456064 (1 row) gaussdb=# \d t3; Table "public.t3" Column | Type | Modifiers --------+----------------+----------- a | integer | b | character(100) | gaussdb=# select count(1) from t3; count ------- 85376 (1 row)
以上示例中,各列长度之和为104B(100B + 4B),有效行数为85376条,有效空间 ≈ 85376 * (104 + 4 + 24) = 11269632。膨胀比 ≈ 90456064 / 11269632 = 8,即空间膨胀了8倍,与方法一的结果近似相等。
父主题: 常见问题