Postgres 12 大对象内存分配

问题描述 投票:0回答:1

Postgres 内存分配中有一个关于大数据对象的方面我不明白。

更详细地说,有关内存分配的统计数据与考虑涉及的表计算的分配不匹配

PostgreSQL 版本:12

我的数据库中有 5 个使用 lob 字段的表,实现为 oid 和相关的大对象。

如果我执行这个查询

select pg_database_size ('<db_name>')

dbms 告诉我大小是 2.8 GB

Db size

如果我执行这个查询

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 大

memory statistics

干运行vaccumlo,我可以找到哪些表正在使用大对象,它们是5个

  • al_system_conf 中的字符串值
  • als_email_record 中的 email_body
  • als_mail_history 中的正文
  • als_resource 中的内容
  • pm_document 中的 doc_content

考虑到大对象存储在 2048 kb 的页面中,我可以估计每个表的内存消耗,这给了我

memory allocation per

如果我试运行vacuumlo,它会说没有孤儿

vacuumlo result

那么,我怎样才能知道2.6GB是如何分配的呢? 我怎样才能释放它们?

postgresql memory-management postgres-12 largeobject
1个回答
0
投票

问题一定出在您根据块大小估计大对象的大小上。你如何知道一个大对象有多少块?您可能只是低估了大型物体的大小,其他一切都井然有序。

© www.soinside.com 2019 - 2024. All rights reserved.