pg_table_size,pg_relation_size和pg_total_relation_size之间有什么区别?(PostgreSQL的)

Mar*_*Roy 15 postgresql

有什么区别pg_table_size(),pg_relation_size()&pg_total_relation_size()

我理解文档中解释的基本差异,但它对我的表实际使用了多少空间意味着什么?

P S*_*tro 55

我非常确定在查看下图后您会很好地理解各种尺寸关系。在阅读了本答案部分中提到的所有答案并在数据库中分析了查询的更多内容后,我制作了此图。

对于存储文件布局 fsm、vm 和 init 的含义,您可以从此链接获取,如 @jmelesky 提到的。

postgresql中的内存类型

  • 图像中的小勘误表:底部框显示“total_relational_size”,应该是“total_relation_size” (2认同)

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_sizepg_indexes_size.

如果你想知道你的表使用了多少空间,可以使用pg_table_sizepg_total_relation_size考虑它们 - 一个数字只是表格,一个数字是表格+索引.

检查存储文件格式为什么一些信息fsm,vminit含义,以及他们是如何存储在磁盘上.


小智 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)