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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM