通过以下系统管理功能获得的数据库大小中包含哪些内容?
select pg_database_size('DBNAME');即使您使用下面的SQL将表的大小和索引的大小相加,并将它们加在一起,它也比pg_database_size获得的大小要小得多。
select sum(relpages * 8192) from pg_stat_user_tables LEFT JOIN pg_class ON pg_stat_user_tables.relname=pg_class.relname
select sum(relpages * 8192) from pg_stat_user_indexes LEFT JOIN pg_class ON pg_stat_user_indexes.relname=pg_class.relname在pg_database_size获得的数据库总大小中,还有哪些其他因素?
发布于 2020-05-12 10:50:00
这是除pg_global之外的所有表空间中的数据库大小。这包括目录(包括注释和统计信息)、空闲空间映射、可见性映射、视图、函数等,但最重要的是,这包括pg_toast表,这是表文件外部存储大型列的位置。
您只是在检查用户表和索引,其中不包括编目、函数、视图或toast表。
此外,最好通过oid连接而不是relname连接,因为relname可以在不同的表空间中重复。但在任何情况下,重新页面只是一个规划者的估计,不会那么可靠。
你可以运行:
SELECT sum(relpages) * 8192 FROM pg_class;因为它将应用于数据库中的所有对象,但这仍然不是真正的值。pg_database_size将检查数据库文件使用的实际空间。
https://stackoverflow.com/questions/61742554
复制相似问题