我在Oracle Linux Server版本6.3上使用PostgreSQL 9.2。使用页面布局的表大小
根据the storage layout documentation,页面布局成立:
- PageHeaderData(24字节)
- 点的n个项(索引项/表项)AKA ItemIdData(4字节)
- 自由空间
- n个项目
- 特殊空间
我测试了它,使一些公式来估算表大小的预期...(TOAST概念可能被忽略。)
postgres=# \d t1;
Table "public.t1"
Column ',' Type ',' Modifiers
---------------+------------------------+------------------------------
code |character varying(8) |not null
name |character varying(100) |not null
act_yn |character(1) |not null default 'N'::bpchar
desc |character varying(100) |not null
org_code1 |character varying(3) |
org_cole2 |character varying(10) |
postgres=# insert into t1 values(
'11111111', -- 8
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'Y',
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'111',
'1111111111');
postgres=# select * from pgstattuple('t1');
table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------
8192 | 1 | 252 | 3.08 | 1 | 252 | 3.08 | 7644 | 93.31
(1 row)
为什么tuple_len
252,而不是249? (“所有列的最大长度的222字节”PLUS “27字节的元组头,后面跟着可选的空位图,可选的对象ID字段和用户数据”)3个字节从哪里来?
我的配方有什么问题吗?
对齐填充?我没有查看详细信息。 –
DOCS可能与HeapTupleHeader的大小有关。我将它编辑为27. – KIM
对于那些想知道:函数'pgstattuple(text)'由附加模块[pgstattuple]提供(http://www.postgresql.org/docs/current/interactive/pgstattuple.html) 。 –