PG_插件笔记
插件awesome:https://gist.github.com/joelonsql/e5aa27f8cc9bd22b8999b7de8aee9d47
德哥打包好的docker镜像:https://github.com/digoal/blog/blob/master/202307/20230710_03.md
pg_freespacemap
可用于查看数据库表对应数据块的空余空间的比例和数量;
pg_freespace(rel regclass IN, blkno bigint IN) returns int2
pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)
rel - 表名
blkno - 数据块号
avail - 可用空间bytes
1 | CREATE EXTENSION pg_freespacemap; |


注意:
统计并不完全准确,因为他是按照1/256的精度进行计算,而且每次插入数据库并不会立即更新,要么等待autovacuum自动执行后查询,要么手动vacuum tablename 后在查询;
另外统计结果对于基础表来说是OK的,对于索引来说是无意义的,因为avail都是0;
pageinspect
参考文档:https://www.postgresql.org/docs/16/pageinspect.html
从pg_freespacemap中得知了数据的空闲空间占比后,详细的可以通过 pageinspect 进行查看;
General Functions
get_raw_page(relname text, fork text, blkno bigint) returns bytea
获取某张表的某号页的bytea值
- relname - 表名
- fork - main / fsm / vm 分别代表 表/索引数据、free space map 空闲磁盘空间映射数据、
- blkno - 某张表的第几号页
1
select * from heap_page_items(get_raw_page('t1','main',0));
get_raw_page(relname text, blkno bigint) returns bytea
同上
get_raw_page(relname text, fork text, blkno bigint) returns bytea
,fork默认为’main’;page_header(page bytea) returns record
展示Postgres堆和索引页的共有属性,显示使用标准页面结构的堆表、索引页面的页头信息;
1
select * from page_header(get_raw_page('t1', 0));
page_checksum(page bytea, blkno bigint) returns smallint
计算page的checksum值
1
SELECT page_checksum(get_raw_page('t1', 0), 0);
fsm_page_contents(page bytea) returns text
heap_page_items()
查数据库大小
1
2
3
4
5
6select * from pg_database;
select pg_size_pretty(pg_database_size('database_name'));
select pg_size_pretty(pg_total_relation_size('table_name'));
select pg_size_pretty(pg_relation_size('table_name'));
select pg_size_pretty(pg_indexes_size('index_name'));
pg_filedump
pg_stat_statements
pg_reorg
pg_repack
参考文档:https://reorg.github.io/pg_repack/