了解Postgres行大小

我有一个大型的(> 100M行)Postgres表,其结构为{整数,整数,整数,没有时区的时间戳记}。我期望行的大小为3 *整数+ 1 *时间戳= 3 * 4 + 1 * 8 = 20字节。

实际上,行大小为pg_relation_size(tbl) / count(*)= 52个字节。为什么?

(不删除表:pg_relation_size(tbl, 'fsm')〜= 0)


千巷猫影
浏览 773回答 3
3回答

扬帆大鱼

每行都有与之关联的元数据。正确的公式是(假定为简单对齐):3 * 4 + 1 * 8 == your data24 bytes == row overheadtotal size per row: 23 + 20或大约53个字节。实际上,我专门写了postgresql-varint来帮助解决这个确切的用例问题。您可能想看一看类似的文章,了解有关re:元组开销的更多详细信息。

慕妹3146593

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