我正在寻找一些实际帮助来解决数据库上的磁盘空间问题。我已经访问过这些页面:
- Postgres:回收空间
- PostgreSQL 表的当前大小(与使用的磁盘空间相比)
- https://stackoverflow.com/questions/41991380/whats-the-difference- Between-pg-table-size-pg-relation-size-pg-total-relatio
在我的上下文中,我仍然有一些问题:我有一个具有 100GB 磁盘空间的数据库。一张表报告使用 73GB 的空间查询:
select
quote_ident(table_schema) || '.' || quote_ident(table_name),
pg_size_pretty(pg_total_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name))) as disk_size
from
information_schema.tables
where
pg_total_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name)) > 100000
order by
pg_total_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name)) desc;
开发人员告诉我他们已经删除了上述表中的许多行。我如何验证这一点?
pg_total_relation_size
返回有关已用磁盘的信息,VACUUM ANALYZE
仅返回可用空间,而不返回磁盘空间。因此pg_total_relation_size
仍然会返回相同的值,对吧?
据我了解,如果我运行VACUUM ANALYZE
它将更新空间管理中的一些引用,数据库可将其用于新行。有没有实用的方法来比较已使用的磁盘空间和实际表大小?可以使用 pgstattuple 或 pg_freespacemap 吗?如果是,您能提供一个查询示例吗?
我还发现一些查询检查返回和pg_catalog.pg_stat_all_tables
的数量。在 a 之后,这些是否会被清除,从而检查 a 之后的死元组总数,看看 a 的可用空间是否不是一个好的指标?n_dead_tup
n_live_tup
VACUUM ANALYZE
VACUUM ANALYZE
VACUUM FULL