我在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) 。 –