PostgreSQL 表空间估算器

按表结构(列类型、字符编码、块大小、TOAST 与 B-Tree 索引、填充率),估算 PostgreSQL 堆表与索引的磁盘占用,辅助容量规划与表结构设计。

功能特性

堆元组感知

基于 23 字节堆元组头、8 字节 MAXALIGN 对齐填充、NULL 位图与变长 varlena 头估算行内占用。

TOAST 模型

变长列超过约 2KB 时启用 TOAST 压缩并溢出至 TOAST 表,可配置压缩率。

实时估算

增删列与 B-Tree 二级索引即时计算堆表与索引磁盘占用。

本地计算

所有估算在浏览器本地完成,无需上传表结构。

使用步骤

01设置表级参数

选择字符编码、块大小、行数、填充率、TOAST 开关与压缩率。

02定义列

添加并配置列的类型、长度/精度、平均长度、是否可空与是否主键。

03定义二级索引

勾选索引包含的列,并设置是否唯一(B-Tree)。

04查看与复制

查看空间构成与优化建议,一键复制评估报告。

适用场景

PostgreSQL 容量规划表结构设计评估分库分表决策索引体积评估堆表与 TOAST 估算迁移容量预算变长字段影响评估

常见问题

估算包含 TOAST 的实际数据吗?

包含。当变长列(text/varchar/bytea/json/jsonb)平均超过约 2KB 且启用 TOAST 时,行内仅留 18 字节指针,其余按「压缩率」计入 TOAST 表;关闭 TOAST 则大字段全部留在堆表行内。

为什么列之间会有对齐填充?

PostgreSQL 在 64 位系统按 8 字节 MAXALIGN 对齐,列之间可能插入填充字节(例如 bigint 后的 boolean 会被对齐到 8 字节边界),这会抬高实际行大小,与 MySQL 不同。

主键(聚簇)怎么计费?

PostgreSQL 堆表本身即数据,主键是堆上的约束而非单独的聚簇索引;但每个二级索引叶子元组都额外携带 6 字节堆 TID 指针以定位行。

块大小有什么影响?

PostgreSQL 默认块大小 8KB(编译期设定)。块越大单次 I/O 吞吐越高但浪费空间的概率增加;此处可切换以估算不同 BLCKSZ 下的页数。

估算结果准确吗?

估算基于堆元组结构、对齐填充、TOAST、B-Tree 索引元组(含 6 字节 TID 与约 10% 内部页开销)与填充率模型,结果接近真实占用,但未计入空闲空间映射(FSM)、可见性映射(VM)、膨胀与碎片,结果仅供参考。

相关工具