【问题标题】:The initialization time of a query查询的初始化时间
【发布时间】:2015-06-04 08:51:04
【问题描述】:
我是查询分析的新手,想了解这个概念的实际含义。例如,我对一些查询运行 EXPLAIN ANALYZE 并得到以下行:
-> 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 中的第一个数字表示初始化所花费的时间,第二个数字大约是查询部分所花费的全部时间。
初始化是什么意思,为什么它占据了执行的主要部分
【问题讨论】:
标签:
sql
postgresql
explain
【解决方案1】:
简短:对您的问题的简短回答是,启动时间可能是找到一个好的查询执行计划所花费的时间 + 等待锁定。。 p>
详细说明:正如PG Documentation 中给出的,“实际时间”中提到的两个数字是:
开始时间:节点实际开始评估的时间(以毫秒为单位)。 (由于您没有给出整个EXPLAIN ANALYSE 输出,因此无法确定这是否是执行计划中的第一个节点)。现在,如果这是要评估的第一个节点,那么这个时间实际上是生成一个好的计划所花费的时间/等待获得锁(如果需要)所花费的时间等。但是,如果这不是第一个节点执行计划,这是第一个数据项从执行计划中的前一个节点到达此节点的第一毫秒。
停止时间:节点执行实际停止的时间(以毫秒为单位)。值得注意的是,第二个数字“不是”节点花费的时间,而是停止时间。
要详细说明,请查看下面的 EXPLAIN ANALYZE 输出:
# 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)
尽管序列扫描进行得非常快,但实际更新需要时间,因为在另一个事务中我将该行锁定了 5 秒以上......因此更新行甚至开始执行需要超过 5000 毫秒(5 秒) .