为了账号安全,请及时绑定邮箱和手机立即绑定

了解Postgres行大小

了解Postgres行大小

千巷猫影 2019-11-18 18:26:22
我有一个大型的(> 100M行)Postgres表,其结构为{整数,整数,整数,没有时区的时间戳记}。我期望行的大小为3 *整数+ 1 *时间戳= 3 * 4 + 1 * 8 = 20字节。实际上,行大小为pg_relation_size(tbl) / count(*)= 52个字节。为什么?(不删除表:pg_relation_size(tbl, 'fsm')〜= 0)
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

每行都有与之关联的元数据。正确的公式是(假定为简单对齐):


3 * 4 + 1 * 8 == your data

24 bytes == row overhead

total size per row: 23 + 20

或大约53个字节。实际上,我专门写了postgresql-varint来帮助解决这个确切的用例问题。您可能想看一看类似的文章,了解有关re:元组开销的更多详细信息。


查看完整回答
反对 回复 2019-11-18
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

RAM中的数据表示甚至需要更多空间。所以不,那里没有压缩。如果您有较长的字符串,它们将被压缩并可能被“烘烤”。有关更多信息,请TOAST参见此处的手册。因此,非常小的元组有相当大的开销。尽管如此,对表的操作通常还是非常快的,所以不要陷入过早地对表进行非规范化的诱惑。如有疑问,请运行性能测试

查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 740 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信