暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 文件目录的文件与 FSM and VM 基础知识

文章转载自公众号AustinDatabases

学习的过程中,高大上的学,基础的也要会,POSTGRESQL 学习过程中发现不捋一捋基础的知识,让基础更夯实,则楼搭的不踏实稍微一个问题,可能就要翻车。

版本PG 11

在数据目录中的目录有什么,作用是什么

base  目录是存储整体POSTGRESQL 数据的目录,而base 里面就是以数据库的OID为名字的目录,目录里面全是这个数据库里面的表及相关文件。

通过上面的oid 对应文件目录BASE 下的目录存储的文件为当前OID 库的数据库文件。

每个堆和索引关系都有一个空闲空间映射(FSM)来跟踪关系中的可用空间。它与主要关系数据一起存储在一个单独的关系fork中,以关系的文件名和一个_fsm后缀命名,_vm后缀命名。


fsm -- free space maps 

其中fsm也有一段故事的,在PG 8.3时fsm是存储在share memory 中的,并且他是一个固定的尺寸,当数据库有大量的删除和更新一集回滚的操作时,很可能因为fsm的问题,造成不能在记录正确的free space。

正是因为这个原因,后面的PG 将_fsm 变成了文件,并且其中文件记录了max_fsm_pages 和  max_fsm_relations 

其中提供了pg_freespace 函数来对查看对应blk 中可以利用的空余的空间

_vm 则是可见性映射表, visual map 主要的作用为,在我们update, delete, 行后,这一行tuple 并不会马上被清理掉,而是要通过vacuum ,autovacuum 等操作将这些dead tuple 来清理, vm文件的主要作用是显示占用的tuple ,扫描的时候会跳过这些tuple。


细心的同学可能会发现有些表可能并没有 fsm vm 文件

首先并不是表一开始建立就有 FSM 文件和VM文件,而是在第一次对这样表进行vacuum 时才会建立fsm文件。

如果想知道你的表的物理文件的对应,通过pg_class 表来进行查询

select relname, relfilenode,reltablespace from pg_class where relname = 'film';

而针对VM 文件,又是那个程序在进行vacuum 时进行使用他来跳过那些标记活动的tuple, 对于系统的vacuum 有两种方式 1 Lazy VACUUM  2 Full Vacuum  两种方式对比的不同,在于第一种不会将系统空间释放给操作系统,并且对系统的影响会较小,而第二种方式会将释放的空间给操作系统,并且早操作的过程中,会产生一个独占锁,而影响正在运行的系统。


而在数据文件或索引文件大于某个容量的时候,例如默认为1G的情况下,会生成和这个当前文件 relfilenode 一样数字的但后面有数字的文件。

所以有些文字上试图增加单个文件的大小,尽量不产生过多这样的文件。


另外需要提示的是FSM 文件使用的是树形结构来记录,空闲的页块,通过代码来看也是从左到右的查找。

一些SQL 语句,与目录有关或文件有关


1.查看当前的PG的数据目录

SHOW data_directory;

2.查看数据库的OID 

select oid, datname from pg_database ;

3.确认某个表的路径

select pg_relation_filepath('film');

4.确认某个表的表空间和表的relfilenode

select relname, relfilenode,reltablespace from pg_class where relname = 'film';

今天大致说了一个数据库表的存储结构,其实里面还有一些东西没有讲出来,后面还会继续深入。



I Love PG

关于我们

中国开源软件推进联盟PostgreSQL分会(简称:PG分会)于2017年成立,由国内多家PG生态企业所共同发起,业务上接受工信部产业发展研究院指导。PG分会致力于构建PG产业生态,推动PG产学研用发展,是国内一家PG行业协会组织。



欢迎投稿

做你的舞台,show出自己的才华 。

投稿邮箱:partner@postgresqlchina.com

                               

                                 ——愿能安放你不羁的灵魂


技术文章精彩回顾




PostgreSQL学习的九层宝塔
PostgreSQL职业发展与学习攻略
搞懂PostgreSQL数据库透明数据加密之加密算法介绍
一文读懂PostgreSQL-12分区表
PostgreSQL源码学习之:RegularLock
Postgresql源码学习之词法和语法分析
最佳实践—PG数据库系统表空间重建
PostgreSQL V12中的流复制配置
2019,年度数据库舍 PostgreSQL 其谁?
PostgreSQL使用分片(sharding)实现水平可扩展性
一文搞懂PostgreSQL物化视图
PostgreSQL原理解析之:PostgreSQL备机是否做checkpoint
PostgreSQL复制技术概述
Postgres是最好的开源软件
PostgreSQL是世界上最好的数据库
从Oracle迁移到PostgreSQL的十大理由

PG活动精彩回顾




见证精彩|PostgresConf.CN2019大会盛大开幕
PostgresConf.CN2019大会DAY2|三大分论坛,精彩不断
PostgresConf.CN2019培训日|爆满!Training Day现场速递!
「PCC-Training Day」培训日Day2圆满结束,PCC2019完美收官
创建PG全球生态!PostgresConf.CN2019大会盛大召开
首站起航!2019“让PG‘象’前行”上海站成功举行
走进蓉城丨2019“让PG‘象’前行”成都站成功举行
中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行
PostgreSQL实训基地落户沈阳航空航天大学和渤海大学,高校数据库课改正当时
群英论道聚北京,共话PostgreSQL
相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报
相知巴厘岛| PG Conf.Asia 2019 DAY2简报
相惜巴厘岛| PG Conf.Asia 2019 DAY3简报
独家|硅谷Postgres大会简报
全球规模最大的PostgreSQL会议等你来!
PostgreSQL线上沙龙第一期精彩回顾
PostgreSQL线上沙龙第二期精彩回顾
PostgreSQL线上沙龙第三期精彩回顾
PostgreSQL线上沙龙第四期精彩回顾
PostgreSQL线上沙龙第五期精彩回顾

PG培训认证精彩回顾




关于中国PostgreSQL培训认证,你想知道的都在这里!
首批中国PGCA培训圆满结束,首批认证考试将于10月18日和20日举行!
中国首批PGCA认证考试圆满结束,203位考生成功获得认证!
中国第二批PGCA认证考试圆满结束,115位考生喜获认证!
请查收:中国首批PGCA证书!
重要通知:三方共建,中国PostgreSQL认证权威升级!
一场考试迎新年 | 12月28日,首次PGCE中级认证考试开考!
近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!
通知:PostgreSQL技术能力电子证书上线!


文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论