1.工具介绍
1)pageinspect扩展工具用于查看数据底层存储信息。
2.pageInspect相关函数介绍
1)get_raw_page函数:将指定表文件中的页面内容返回。param1:表名,param2:main/fsm/vm, param3:第几页;
2)page_header函数:返回本页面中的page header信息。param1:get_raw_page函数的返回值;
3)heap_page_items函数:显示堆页面上的所有行指针。param1:get_raw_page函数的返回值。
3.在数据中新增一条数据
在pgsql插入一条数据则会在单个page新增一个tuple+tupleHeader+tuplePointer,其中tuple数据大小不定,tupleHeader占24字节,tupleHeader占4字节。
试验猜测:
1)当插入一条int类型的数据时,由于itemPointer是从前往后插入的,每次增加4字节,因此lower会以4字节的长度递增;
2)当插入一条int类型的数据时,由于tupleHeader是从后往前插入的,每次增加tupleHeader的长度24+tuple的长度(这里为int)4=28字节的长度递增,但是计算机中一般取8的整数倍,因此以32字节减小。
试验验证:
drop table if EXISTS test1;
create table test1(id int);
vacuum analyze test1;
-- 1.插入第一条数据
insert into test1 values(1);
-- 2.查看页头相关信息
select * from page_header(get_raw_page('test1', 'main', 0));
-- 3.插入第二条数据
insert into test1 values(2);
-- 4.查看页头相关信息
select * from page_header(get_raw_page('test1', 'main', 0));
-- 5.插入第三条数据
insert into test1 values(300);
select * from public.test1;
-- 6.查看页头相关信息
sele