• 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)
    但行好事,莫问前程
  • 相关阅读:
    vi 编辑内容中查找字符位置
    使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务
    EBS R12 更改SYSADMIN密码
    两种步骤 更改 EBS R12界面LOGO以及内容
    Get Current LOV Query SQL
    Oracle Gateways透明网关访问SQL Server
    Oracle 数据集成的实际解决方案
    将SQLServer2005中的数据同步到Oracle中
    ogg实现oracle到sql server 2005的同步
    wince和window mobile winphone
  • 原文地址:https://www.cnblogs.com/mingfan/p/14771267.html
Copyright © 2020-2023  润新知