前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pginspect几个函数

pginspect几个函数

作者头像
yzsDBA
发布2020-10-28 10:23:00
6660
发布2020-10-28 10:23:00
举报
文章被收录于专栏:PostgreSQL研究与原理解析

pageinspect作为插件,查看数据库中页内容。

这个插件具有的函数功能:

get_raw_page

get_raw_page(relname text, fork text, blkno int) returns bytea

读取表文件指定页号的内容。Fork:main,fsm,vm和init:initialization fork。

可以调用get_raw_page(relname text,blkno int)读取main主表内容。

page_header

page_header(page bytea) returns record

给定页地址,返回页头信息(heap和index页)。页地址可以通过get_raw_page函数获取。

test=# SELECT * FROM page_header(get_raw_page('pg_class', 0));

lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid

-----------+----------+--------+-------+-------+---------+----------+---------+-----------

0/24A1B50 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0

page_checksum

page_checksum(page bytea,blkno int4) return smallint

计算给定页的checksum,页地址可以通过get_raw_page函数获取,checksum依赖于页号,所以页号必须作为入参传入:

test=# SELECT page_checksum(get_raw_page('pg_class', 0), 0);

page_checksum

---------------

13443

fsm_page_contents

fsm_page_contents显示fsm页的内部结构:

test=# SELECT fsm_page_contents(get_raw_page('pg_class', 'fsm', 0));

输出多行字符串,页中Btree的一个节点一行。只有非零节点才会打印。指向next slot的“next”指针也会打印。

heap_page_items

heap_page_items(page bytea) returns setof record

显示heap页中多有line指针。会显示所有tuple。

Select count(*) from heap_page_items(get_raw_page(‘t’,1));

第一页中有几个记录

tuple_data_split

tuple_data_split(rel_oid oid, t_data bytea, t_infomask integer, t_infomask2 integer, t_bits text [, do_detoast bool]) returns bytea[]

将tuple的数据以16进制按列显示。

heap_page_item_attrs

heap_page_item_attrs(page bytea, rel_oid regclass [, do_detoast bool]) returns setof record

和heap_page_item_attrs和heap_page_items类似。

bt_metap

bt_metap(relname text) returns record

返回Btree索引的元数据信息:

test=# SELECT * FROM bt_metap('pg_cast_oid_index');

-[ RECORD 1 ]-----------+-------

magic | 340322

version | 3

root | 1

level | 0

fastroot | 1

fastlevel | 0

oldest_xact | 582

last_cleanup_num_tuples | 1000

bt_page_stats

bt_page_stats(relname text, blkno int) returns record

返回btree索引单页信息:

test=# SELECT * FROM bt_page_stats('pg_cast_oid_index', 1);

-[ RECORD 1 ]-+-----

blkno | 1

type | l

live_items | 256

dead_items | 0

avg_item_size | 12

page_size | 8192

free_size | 4056

btpo_prev | 0

btpo_next | 0

btpo | 0

btpo_flags | 3

bt_page_items

bt_page_items(relname text, blkno int) returns setof record

Btree索引页中所有items的详细信息:

test=# SELECT * FROM bt_page_items('pg_cast_oid_index', 1);

itemoffset | ctid | itemlen | nulls | vars | data

------------+---------+---------+-------+------+-------------

1 | (0,1) | 12 | f | f | 23 27 00 00

2 | (0,2) | 12 | f | f | 24 27 00 00

3 | (0,3) | 12 | f | f | 25 27 00 00

4 | (0,4) | 12 | f | f | 26 27 00 00

5 | (0,5) | 12 | f | f | 27 27 00 00

6 | (0,6) | 12 | f | f | 28 27 00 00

7 | (0,7) | 12 | f | f | 29 27 00 00

8 | (0,8) | 12 | f | f | 2a 27 00 00

Btree的叶子页,ctid指向heap tuple。内部页,ctid的页号部分指向索引的其他页。offset部分通常被忽略,设置为1

也可以使用函数bt_page_items(page bytea)

gin_metapage_info:gin索引元数据信息

gin_page_opaque_info:gin索引的opaque域

gin_leafpage_items:gin 叶子页的数据

hash_page_type:hash索引页页类型

hash_page_stats:hash索引的溢出页或者bucket的信息

hash_page_items:

hash_bitmap_info

hash_metapage_info

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • get_raw_page
  • page_header
  • page_checksum
  • fsm_page_contents
  • heap_page_items
  • tuple_data_split
  • heap_page_item_attrs
  • bt_metap
  • bt_page_stats
  • bt_page_items
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档