有什么区别pg_table_size()
,pg_relation_size()
&pg_total_relation_size()
?
我理解文档中解释的基本差异,但它对我的表实际使用了多少空间意味着什么?
jme*_*sky 23
对于随机表:
# 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)
Run Code Online (Sandbox Code Playgroud)
从那以后,你可以告诉它pg_table_size
是所有返回值的总和pg_relation_size
.和pg_total_relation_size
是的总和pg_table_size
和pg_indexes_size
.
如果你想知道你的表使用了多少空间,可以使用pg_table_size
和pg_total_relation_size
考虑它们 - 一个数字只是表格,一个数字是表格+索引.
检查存储文件格式为什么一些信息fsm
,vm
和init
含义,以及他们是如何存储在磁盘上.
小智 14
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';
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
所以 pg_table_size 不仅是 pg_relation_size 所有返回值的总和,而且还必须添加 toast 大小
toast_bytes | 5748 MB
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10790 次 |
最近记录: |