繁体   English   中英

PostgreSQL 数据库大小不等于所有表大小之和

[英]PostgreSQL Database size is not equal to sum of size of all tables

我正在使用 AWS RDS PostgreSQL 实例。 我正在使用以下查询来获取所有数据库的大小。

SELECT datname, pg_size_pretty(pg_database_size(datname))
from pg_database
order by pg_database_size(datname) desc 

一个数据库的大小为 23 GB,当我运行以下查询以获取此特定数据库中所有单个表的大小总和时,大约为 8 GB。

select pg_size_pretty(sum(pg_total_relation_size(table_schema || '.' || table_name)))
from information_schema.tables

因为它是一个 AWS RDS 实例,所以我没有 pg_toast 架构的权限。 如何找出哪个数据库对象正在消耗大小?

提前致谢。

文档说:

pg_total_relation_size ( regclass ) → bigint

计算指定表使用的总磁盘空间,包括所有索引和 TOAST 数据。 结果相当于pg_table_size + pg_indexes_size

因此涵盖了 TOAST 表和索引。

一种简单的解释可能是您连接到的数据库与显示为 23GB 的数据库不同。

另一种可能的解释是物化视图,它消耗空间,但不会出现在information_schema.tables

另一种解释可能是发生了崩溃,留下了一些垃圾文件,例如在重写表或索引期间出现空间不足的情况之后。

这当然更难在托管平台上调试,在那里您没有 shell 访问权限......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM