天天看點

postgresql實體檔案

base目錄下是每個資料庫檔案存放的地方

postgresql實體檔案

這些數字含義是每個資料庫的oid。

postgresql實體檔案

pgsql_tmp是用來存放臨時檔案的,想一些超過記憶體大小的排序等。

進入其中一個目錄看下裡面包含的檔案:fsm檔案,vm檔案,init檔案和資料檔案。

postgresql實體檔案

這些數字的對應着pg_class中字段relfilenode值,随便去一個檔案名如46203去pg_class中查找一下。

postgresql實體檔案

這個是表名是b的對于的資料檔案。這個檔案不隻是每個表都有,索引也會有這樣的一個檔案。

postgresql實體檔案

看到b表的索引relfilenode是46204,對于該資料庫目錄下也能找到同樣的檔案。

如果這個表很大你會看到這種情況:

postgresql實體檔案

預設表或者索引大小超過1g時就會進行分割,這個大小可以通過安裝pg是指定--with-segsize調整段的大小。

字尾是_fsm的是fsm檔案,這個檔案是用來進行空間映射的表示頁面中可以使用的空餘空間。

vm檔案是辨別該頁的所有元組對所有事務是否可見,如果辨別可見可以跳過vacuum掃描。

init檔案是每一個不記錄日志表或者該表上的每一個索引都會有個對應的檔案。

還有一種檔案,toast檔案,pg不允許跨頁面存元組,如果字段很大會将呢個字段的資料放入toast檔案中。toast檔案主要有4中存儲方式plain不壓縮,不進行外行存儲,這個就是普通定長字段的存儲方式。 extended允許外行存儲和壓縮,toast預設存儲方式。 external允許外行存儲不允許壓縮。

main允許壓縮不允許外行存儲,如果壓縮後還是過大的話還是會進行外行存儲的。

toast檔案有點,如果沒有選擇用toast檔案存儲的字段時,不會掃描toast檔案。

幾個關于檔案大小的函數:

pg_column_size(any)列大小。

pg_database_size(name)資料庫大小。

pg_relation_size(regclass)關系的大小,不含索引和toast檔案,vm檔案,fsm檔案。

pg_relation_size(regclass,'fsm')可以得出關系中fsm或者vm檔案大小。

pg_indexes_size(regclass)索引大小包含fsm檔案。

pg_size_pretty(numberic)将位元組轉換成mb,gb等機關

pg_table_size(regclass)這個大小是表的大小還有toast檔案,fsm檔案,vm檔案加起來的大小,不含索引。

pg_total_relation_size(regclass)包含索引的各種表檔案的全部大小。