pg_table_size()
、pg_relation_size()
和pg_total_relation_size()
之间的区别是什么
我理解in the documentation所解释的基本区别,但就我的表实际使用的空间而言,这意味着什么呢?
发布于 2017-02-02 07:12:46
对于随机表:
# select pg_relation_size(20306, 'main') as main,
pg_relation_size(20306, 'fsm') as fsm,
pg_relation_size(20306, 'vm') as vm,
pg_relation_size(20306, 'init') as init,
pg_table_size(20306), pg_indexes_size(20306) as indexes,
pg_total_relation_size(20306) as total;
main | fsm | vm | init | pg_table_size | indexes | total
--------+-------+------+------+---------------+---------+--------
253952 | 24576 | 8192 | 0 | 286720 | 196608 | 483328
(1 row)
由此可以看出,pg_table_size
是pg_relation_size
的所有返回值的总和。pg_total_relation_size
是pg_table_size
和pg_indexes_size
的总和。
如果您想知道您的表使用了多少空间,可以使用pg_table_size
和pg_total_relation_size
来考虑它们--一个数字是仅表,另一个数字是表+索引。
查看storage file layout,了解fsm
、vm
和init
的含义以及它们在磁盘上的存储方式。
发布于 2020-04-03 17:21:28
pg_table_size
:指定表使用的磁盘空间,不包括索引(但包括TOAST、可用空间映射和可见性映射)
pg_relation_size
:关系的主数据分支的大小
select
pg_size_pretty(pg_total_relation_size(relid)) as total_size,
pg_size_pretty(pg_relation_size(relid, 'main')) as relation_size_main,
pg_size_pretty(pg_relation_size(relid, 'fsm')) as relation_size_fsm,
pg_size_pretty(pg_relation_size(relid, 'vm')) as relation_size_vm,
pg_size_pretty(pg_relation_size(relid, 'init')) as relation_size_init,
pg_size_pretty(pg_table_size(relid)) as table_size,
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as external_size
from
pg_catalog.pg_statio_user_tables
where
schemaname = 'XXXX'
and relname like 'XXXXXX';
total_size | 6946 MB
relation_size_main | 953 MB
relation_size_fsm | 256 kB
relation_size_vm | 32 kB
relation_size_init | 0 bytes
table_size | 6701 MB
external_size | 5994 MB
因此,pg_table_size不仅是pg_relation_size的所有返回值的总和,还必须加上吐司大小
toast_bytes | 5748 MB
https://stackoverflow.com/questions/41991380
复制相似问题