
# 如何评估当前表/库空间膨胀比
- 方法一：如果条件允许，可以通过 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倍，与方法一的结果近似相等。
  
 
