小编Ser*_*gey的帖子

在 Postgres 中向系统目录添加索引

我遇到的情况与此处描述的情况非常相似:

我有一个 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)

postgresql index information-schema system-tables

5
推荐指数
1
解决办法
1154
查看次数