如何衡量postgres的时间

时间:2013-10-19 11:11:38

标签: sql postgresql

在postgres中,我想知道生成计划所需的时间。我知道\时间给了我在找到最佳计划后执行计划所花费的时间。但我想找出postgres找出最佳计划的时间。是否有可能在postgres中确定这个时间。如果是,那怎么办?

同时查询计划生成器有时找不到最佳计划。我可以强制postgres使用最佳计划生成计划。如果是,那我该怎么办?

1 个答案:

答案 0 :(得分:1)

对于准备计划所花费的时间和执行计划所花费的时间,您可以使用explain(仅查找计划)与解释分析(实际运行它)并启用\ timing:

test=# explain select * from test where val = 1 order by id limit 10;
                                   QUERY PLAN                                   
--------------------------------------------------------------------------------
 Limit  (cost=0.00..4.35 rows=10 width=8)
   ->  Index Scan using test_pkey on test  (cost=0.00..343.25 rows=789 width=8)
         Filter: (val = 1)
(3 rows)

Time: 0.759 ms
test=# explain analyze select * from test where val = 1 order by id limit 10;
                                                        QUERY PLAN                                                         
---------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..4.35 rows=10 width=8) (actual time=0.122..0.170 rows=10 loops=1)
   ->  Index Scan using test_pkey on test  (cost=0.00..343.25 rows=789 width=8) (actual time=0.121..0.165 rows=10 loops=1)
         Filter: (val = 1)
         Rows Removed by Filter: 67
 Total runtime: 0.204 ms
(5 rows)

Time: 1.019 ms

请注意,两个命令实际输出计划的开销很小。

  

通常它会发生,例如在DB2中,由于找到最佳计划需要花费大量时间。因此,数据库引擎决定使用次优计划......我认为必须与postgres一起使用。

在Postgres中,只有当您的查询足够残忍以至于无法合理地进行详尽搜索时,才会出现这种情况。当您达到相关阈值(如果您的用例是典型的那样很高时),计划程序将使用遗传查询优化器:

http://www.postgresql.org/docs/current/static/geqo-pg-intro.html

  

如果是,那么我如何摆弄postgres,以便选择最佳计划。

在更一般的用例中,有很多东西可以摆弄,但要非常小心搞乱它们(或许,除了使用ALTER TABLE SET STATISTICS收集更多关于选定的几列的统计数据) :

http://www.postgresql.org/docs/current/static/runtime-config-query.html