You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

估算不同列数和行数下PostgreSQL表的GB级大小

PostgreSQL GB级表大小估算公式(基于列数K和行数)

基础前提

默认基于PostgreSQL标准配置:

  • 页大小:8KB(8192字节)
  • 元组头开销:每行固定23字节(事务ID、元数据指针等)
  • 页头开销:每个页固定272字节
  • float默认指float8(双精度,8字节);若使用float4(单精度,4字节),将公式中8替换为4即可
  • 填充因子:默认100%(无预留更新空间,成本估算取此最保守值)
  • TOAST压缩率:估算取30%-50%(保守场景可按100%即无压缩计算)

场景1:行未触发TOAST存储(K较小,单行总大小 ≤ 4096字节)

当31 + 8K ≤ 4096(即K ≤ 508)时,单行数据可完整存入一个页,无需TOAST:

  1. 计算单行总大小
单行总大小(字节)= 23(元组头) + 8(timestamp) + K * 8(float8)= 31 + 8K
  1. 计算每页可容纳行数
每页行数 = floor( (8192 - 272) / 单行总大小 )
  1. 计算总表大小(不含索引,转换为GB)
总大小(GB)= ceil( 总行数 / 每页行数 ) * 8192 / (1024^3)

场景2:行触发TOAST存储(K较大,单行总大小 > 4096字节)

当31 + 8K > 4096(即K > 508)时,所有float列会被压缩后存入TOAST表,主表仅存指针:

主表大小计算

  1. 主表单行大小
主表单行大小(字节)= 23(元组头) + 8(timestamp) + K * 20(TOAST指针)= 31 + 20K
  1. 主表总大小
主表每页行数 = floor( (8192 - 272) / 主表单行大小 )
主表总大小(字节)= ceil( 总行数 / 主表每页行数 ) * 8192

TOAST表大小计算

  1. TOAST单行存储大小
TOAST单行大小(字节)= 8 * K * 压缩率  # 压缩率建议取0.3~0.5,保守估算用1
  1. TOAST总大小
TOAST每页行数 = floor( (8192 - 272) / TOAST单行大小 )
TOAST总大小(字节)= ceil( 总行数 / TOAST每页行数 ) * 8192

总表大小(主表+TOAST表,转换为GB)

总大小(GB)= (主表总大小 + TOAST总大小) / (1024^3)

额外开销说明

  • 索引开销:若为timestamp列创建B树索引,索引大小约为表大小的30%-50%,估算时可按表大小的40%额外添加
  • 误差余量:实际存储因块对齐、碎片等会有±10%的误差,成本建议预留10%-20%的缓冲空间

内容的提问来源于stack exchange,提问作者Ulderique Demoitre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:55:05