2015-06-04 48 views
0

我是查询分析的新手,想了解这个概念实际上的含义。比如我跑EXPLAIN分析一些查询,并得到了以下行:查询的初始化时间

-> Sort (cost=816428.39..827478.32 rows=4419971 width=21) 
     (actual time=10780.477..12520.838 rows=4415703 loops=1) 

至于我可以谷歌周围,在actual time=10780.477..12520.838的第一个数字是指花在初始化的时间,第二个是关于整个时间用于查询的一部分。

什么初始化均值和为什么需要执行

回答

1

的主要部分:简短的回答你的问题是,它可能是触发时间是花时间去找到一个很好的查询执行计划+ 等待锁

:正如PG Documentation给出的,在“实际时间”中提到的两个数字是:

  • 开始时间:当节点其实已经开始评估毫秒的时间。 (由于您没有输出完整的EXPLAIN ANALYSE输出,因此无法确定这是否是执行计划中的第一个节点)。现在,如果这是第一个要评估的节点,那么这一次实际上是等待获取锁定所需的时间(如果需要)等等所花费的时间。但是,如果这不是第一个节点执行计划,这是第一个数据项到达此节点时的第一个毫秒,来自执行计划中的前一个节点。

  • 停止时间:节点执行实际停止时的时间(以毫秒为单位)。值得注意的是,第二个数字不是节点花费的时间,而是停止时间。

为了详细看看这个EXPLAIN以下分析输出:

# explain analyse update t set a = 20 where a = 10; 
              QUERY PLAN 
--------------------------------------------------------------------------------------------------- 
Update on t (cost=0.00..40.00 rows=12 width=6) (actual time=5719.955..5719.955 rows=0 loops=1) 
    -> Seq Scan on t (cost=0.00..40.00 rows=12 width=6) (actual time=0.015..0.018 rows=1 loops=1) 
     Filter: (a = 10) 
Total runtime: 5719.985 ms 
(4 rows) 

虽然顺序扫描通过非常快的行走,Actualy更新需要时间,因为其他事务我锁定该行5 +秒......因此UPDATE行花费超过5000毫秒(5秒)甚至开始执行。