AWS RDS postrgres 大量磁盘使用,小表

Chr*_*isJ 6 postgresql database-size postgresql-9.5 amazon-rds

我不明白为什么我们的 AWS postgres 服务器耗尽了它的所有空间。我们只需要增加分配给它的存储空间,但无法从 postgres 中找到任何关于它正在使用那么多空间的提示。

亚马逊表示,我们在过去两周内吃掉了大约 60GB。Postgres 说我们的整个数据库仅超过 5GB,数据库操作主要是 INSERT 和 SELECT。

如何追踪和回收我们的存储?

这是 PSQL 中一些 size 命令的输出

select pg_size_pretty(pg_database_size('my_db'));
-- 3730 MB

SELECT     pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
  ORDER BY pg_total_relation_size(C.oid) DESC
  LIMIT 20;
Run Code Online (Sandbox Code Playgroud)

1540 MB
1286 MB
235 MB
191 MB
Run Code Online (Sandbox Code Playgroud)

奇怪的是 autovacuumer 从未在任何表上触发(我假设这是因为我们很少删除行?)相对于表大小,死行的数量相当低(这些表的行数为数十万或百万)

SELECT
  vacuum_count, autovacuum_count, n_dead_tup
FROM pg_stat_user_tables ORDER BY n_dead_tup DESC limit 5;

0   0   161
0   0   119
1   0   76
0   0   25
0   0   11
Run Code Online (Sandbox Code Playgroud)

主要是对数据库的操作是 INSERT 和 SELECT,有些是 UPDATES,很少是 DELETE。我们使用了很多 JSONB。

更新

\l+ 显示与其他查询相同:3730 MB