Postgres 内存分配中有一个关于大数据对象的方面我不明白。
更详细地说,有关内存分配的统计数据与考虑涉及的表计算的分配不匹配
PostgreSQL 版本:12
我的数据库中有 5 个使用 lob 字段的表,实现为 oid 和相关的大对象。
如果我执行这个查询
select pg_database_size ('<db_name>')
dbms 告诉我大小是 2.8 GB
如果我执行这个查询
SELECT
table_schema || '.' || table_name AS table_full_name,
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;
dbms 告诉我大对象表有 2.6 GB 大
干运行vaccumlo,我可以找到哪些表正在使用大对象,它们是5个
考虑到大对象存储在 2048 kb 的页面中,我可以估计每个表的内存消耗,这给了我
如果我试运行vacuumlo,它会说没有孤儿
那么,我怎样才能知道2.6GB是如何分配的呢? 我怎样才能释放它们?
问题一定出在您根据块大小估计大对象的大小上。你如何知道一个大对象有多少块?您可能只是低估了大型物体的大小,其他一切都井然有序。