我遇到的情况与此处描述的情况非常相似:
我有一个 SaaS 情况,我在单个数据库中使用 1000 多个模式(每个模式包含相同的表,只是每个租户的数据不同)。我使用了模式,以便共享应用程序服务器可以为所有模式共享到单个数据库的连接。一切正常。
而且,虽然应用程序本身似乎运行良好,但一些涉及系统目录的查询非常缓慢。此外,psql的自动完成完全没用,\dt而且速度很慢。
特别是,我需要使用以下方法计算每个模式的磁盘大小:
SELECT sum(pg_total_relation_size(c.oid)) AS size
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
WHERE n.nspname = 'abbiecarmer'
AND c.relkind = 'r';
Run Code Online (Sandbox Code Playgroud)
这很慢。查看查询计划,我看到
Aggregate (cost=136903.16..136903.17 rows=1 width=4) (actual time=1024.420..1024.420 rows=1 loops=1)
-> Hash Join (cost=8.28..136902.86 rows=59 width=4) (actual time=143.247..1016.749 rows=60 loops=1)
Hash Cond: (c.relnamespace = n.oid)
-> Seq Scan on pg_class c (cost=0.00..133645.24 rows=866333 width=8) (actual time=0.045..943.029 rows=879788 loops=1) ?
Filter: (relkind = 'r'::"char")
Rows Removed …Run Code Online (Sandbox Code Playgroud)