PostgreSQL之FSM与VM
2021/5/16 19:25:38
本文主要是介绍PostgreSQL之FSM与VM,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们都知道,postgresql的base目录是存储整体数据的目录,而base 里面就是以数据库的OID为名字的目录,目录里面全是这个数据库里面的表及相关文件。
select datname ,oid from pg_database ;
我们查询某张表的存储位置
select pg_relation_filepath('table1'); ---
postgres=# select pg_relation_filepath('table1');
pg_relation_filepath
----------------------
base/12723/24765
(1 row)
查看该表对应的存储文件
可以看到有后缀为“_fsm”或“_vm”命名的文件
空闲空间映射(FSM)
空闲空间映射(FSM)主要用来保持对关系中可用空间的跟踪。它伴随着主关系数据被存储在一个独立的关系分支中,以关系的文件节点号加上一个_fsm后缀命名。例如,如果一个关系的文件节点是12345,那么FSM被存储在一个名为12345_fsm的文件中,该文件与主关系文件在同一个目录中。 pg_freespacemap模块可以用来检查存储在空闲空间映射中的信息。 要使用pg_freespacemap模块可以通过安装扩展方式实现 开启postgresql 服务的前提下 进入:contrib/pg_freespacemap/ 目录 运行 :gmake 然后,运行 gmake install 再运行 psql , 在psql 状态下,运行: create extension pg_freespacemap;select * from pg_available_extensions where name like 'pg_free%'; ---
postgres=# select * from pg_available_extensions where name like 'pg_free%';
name | default_version | installed_version | comment
-----------------+-----------------+-------------------+----------------------------------
pg_freespacemap | 1.2 | 1.2 | examine the free space map (FSM)
(1 row)
查看某张表的fsm
select * from pg_freespace('table1'); ---
postgres=# select * from pg_freespace('table1');
blkno | avail
-------+-------
0 | 8128
(1 row)
需要注意:FSM文件是执行VACUUM操作时,或者是为了插入行而第一次查询FSM文件时才会创建;
可见性映射(VM)
每一个堆关系都有一个可见性映射(VM)用来跟踪哪些页面 只包含已知对所有活动事务可见的元组,它也跟踪哪些页面只包含 未被冻结的元组。它伴随着主关系数据被存储在一个独立的关系分支中, 以该关系的文件节点号加上一个_vm后缀来命名。例如, 如果一个关系的文件节点为12345,其VM被存储在名为12345_vm的文件中, 该文件域主关系文件在同一个目录中。 注意索引没有VM。 VM主要的作用为,在我们对表中的行做了update, delete后,这一行的tuple 并不会马上被清理掉,pg会通过vacuum 操作将这些dead tuple 清理, vm文件的主要作用是显示占用tuple ,扫描的时候会跳过这些tuple。 类似fsm的pg_freespacemap pg_visibility模块可以被用来检查存储在可见性映射中的信息。 安装方式同pg_freespacemap一致create extension pg_visibility ;为给定关系的给定块返回其在可见性映射中的“全部可见”和“全部冻结”位。
select pg_visibility_map('table1'); --- postgres=# select pg_visibility_map('table1'); pg_visibility_map ------------------- (0,f,f) (1,t,f) (2,t,f) (3,t,f) (4,f,f) (5 rows)
这篇关于PostgreSQL之FSM与VM的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-05快速清空 PostgreSQL 数据库中的所有表格,让你的数据库重新焕然一新!
- 2024-01-04在PostgreSQL中创建角色:判断角色是否存在并创建
- 2023-05-16PostgreSQL一站式插件推荐 -- pg_enterprise_views
- 2022-11-22PostgreSQL 实时位置跟踪
- 2022-11-22如何将PostgreSQL插件移植到openGauss
- 2022-11-11PostgreSQL:修改数据库用户的密码
- 2022-11-06Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
- 2022-10-27Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
- 2022-10-11PostgreSql安装(Windows10版本)
- 2022-09-13PostgreSQL-Network Address类型操作和函数