为什么在主表上进行查询的速度很慢?

时间:2015-07-10 13:36:43

标签: performance postgresql partitioning

我有一张非常大的桌子。所以我把这个表分区了。并将所有记录从主表复制到子表。然后我删除了主表中的所有记录。现在我的主表是空的。在子表上进行查询非常快。但是对主表进行查询仍然很慢。它有什么问题?

postgres=# select count(*) from only cdr;
 count 
-------
     0
(1 row)

postgres=# explain select count(*) from only cdr;
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=2045094.31..2045094.32 rows=1 width=0)
   ->  Seq Scan on cdr  (cost=0.00..2044867.85 rows=90585 width=0)
(2 rows)

postgres=# EXPLAIN ANALYZE select count(*) from only cdr;
                                                        QUERY PLAN                                                    

----------------------------------------------------------------------------------------------------------------------
-----
 Aggregate  (cost=2045094.31..2045094.32 rows=1 width=0) (actual time=168385.356..168385.356 rows=1 loops=1)
   ->  Seq Scan on cdr  (cost=0.00..2044867.85 rows=90585 width=0) (actual time=168385.351..168385.351 rows=0 loop
s=1)
 Total runtime: 168385.404 ms
(3 rows)

我还在主表上运行了真空分析。但仍然没有运气。

postgres =#vacuum analyze cdr; 真空

我发现其他一些人也有同样的问题。也许根本原因是虽然主表中的旧记录已被删除,但psql仍以某种方式扫描这些垃圾数据。一种解决方案是创建一个新的主表,并放弃旧的主表。但这个解决方案并不适合我。没有停机的任何其他解决方案?谢谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。只需要运行"真空吸尘"或"集群"在主表上。