【问题标题】:Inconsistent Time in Oracle Explain PlanOracle 解释计划中的时间不一致
【发布时间】:2017-06-21 19:25:09
【问题描述】:

我有以下查询,其解释计划如下所示。

查询需要 2.3 秒。

但 EXPLAIN PLAN 显示 INDEX FAST FULL SCAN 显示时间 = 00:10:06 秒

有什么理由吗?

select count(*) from c1
COUNT(*)
----------
  68656440

Elapsed: 00:00:02.31

Execution Plan
----------------------------------------------------------
Plan hash value: 2610173813

-------------------------------------------------------------------------
| Id  | Operation             | Name    | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |         |     1 | 50450   (1)| 00:10:06 |
|   1 |  SORT AGGREGATE       |         |     1 |            |          |
|   2 |   INDEX FAST FULL SCAN| PF_TEST |    83M| 50450   (1)| 00:10:06 |
-------------------------------------------------------------------------

Note
-----

- 用于此语句的动态采样 (level=2)

统计


      0  recursive calls
      0  db block gets
 185865  consistent gets
 185820  physical reads
      0  redo size
    529  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

【问题讨论】:

  • 你有什么方法得到计划?
  • 设置自动跟踪
  • 解释计划是一个估计,所以估计你需要 10:06 秒来执行你的查询。估计的 83M 行是真的吗?
  • 是 - 估计 83M 行非常接近它实际检索到的 68M
  • 不是很准确,差不多是 20% 的折扣。

标签: sql oracle database-performance


【解决方案1】:

解释计划是对 oracle 认为执行该语句所需的估计,试试这个:

set timi on
select count(*) from c1;
set timi off

select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

那看看A-time栏目,准确吗? 应该是的。

【讨论】:

  • 那是因为这一次是基于语句的真实执行,而不是估计。如果它回答了您的问题,您可以接受我的回答。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2013-02-02
  • 2019-08-12
  • 2021-09-11
相关资源
最近更新 更多