Sql postgres表中元数据的大小是多少?

Sql postgres表中元数据的大小是多少?,sql,postgresql,memory,Sql,Postgresql,Memory,postgres 9.4中有一个表,其中包含以下类型的列: NAME TYPE TYPE SIZE id | integer | 4 bytes timestamp | timestamp with time zone | 8 bytes num_seconds

postgres 9.4中有一个表,其中包含以下类型的列:

 NAME                         TYPE                       TYPE SIZE
 id                         | integer                  | 4 bytes
 timestamp                  | timestamp with time zone | 8 bytes 
 num_seconds                | double precision         | 8 bytes
 count                      | integer                  | 4 bytes
 total                      | double precision         | 8 bytes
 min                        | double precision         | 8 bytes
 max                        | double precision         | 8 bytes
 local_counter              | integer                  | 4 bytes
 global_counter             | integer                  | 4 bytes                                                                     
 discrete_value             | integer                  | 4 bytes
总计:
60字节/行

pg\u table\u size(table)
返回的表(带toast)的大小为:
49 152字节

表中的行数:
97

考虑到一个表被拆分为
8kB
的页面,我们可以将
49152/8192=6个页面
放入这个表中

每一页和每一行都有一些。。。 从纯数据类型大小来看,我们应该期望行数据的大小大约为
97*60=5820字节
,并向其中添加大致相同数量的元数据,我们甚至没有接近
pg_table_size
返回的结果:49 152字节


与postgres中的纯数据相比,元数据真的占用了约9倍的空间吗?

因子9显然比应该占用的空间更多(“膨胀”):

  • 每个页面都有一个16字节的标题

  • 每行有一个23字节的“元组头”

  • 由于对齐原因,
    id
    timestamp
    之间以及
    count
    total
    之间将有四个字节的填充(您可以通过对列重新排序来避免)

  • 此外,每个元组在数据页中有两个字节的“行指针”

有关详细信息,请参阅

要查看表中空间的使用情况,请安装
pgstattuple
扩展:

CREATE EXTENSION pgstattuple;
并使用表中的
pgstattuple
功能:

SELECT * FROM pgstattuple('tablename');

运行
真空吸尘器充满_表后会得到什么?现在是
16384字节
。考虑到从未从表中删除任何内容,这是一个巨大的真空清理结果,而且由于锁定,在使用数据库时,我无法
真空填充数据库。计算磁盘上的千字节有什么意义?生成一百万行,然后查看使用情况。如果您在非常有限的环境中工作,那么Pg可能不是正确的选择…膨胀不仅是由删除引起的,而且也是由更新引起的-特别是如果您有长时间运行的事务,并且autovacuum无法处理旧的行“考虑到从未从表中删除任何内容,这是一个巨大的真空清理结果,而且由于锁定,在使用数据库时,我无法将其完全真空“我以为你的目标是理解。你真的担心32kB是一个实用的问题吗?如上所述,在清空后,大小从49kB下降到16kB。我不知道“真空满”(vacuum full)是怎么做的,但我唯一怀疑的可能是,我们在一小时开始时插入了几个条目,在这一小时内,我们每分钟更新一次,这些更新留下了垃圾。对,大量的
更新将导致膨胀。